Grafisch programmeren met GTK



Vergelijkbare documenten
Grafisch programmeren met GTK - Deel 2

De MySQL C API. Variabelen in C Functies in C Pointers in C

Ontdek het universum. Wat is Celestia? LinuxFocus article number door Katja Socher <katja/at/linuxfocus.

Gnome applicaties ontwikkelen met Python (deel 2)

DocBook XML documenten bewerken

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

Linux op de desktop: een computer voor mam

Dia, een programma voor het maken van diagrammen

Gentoo linux. Introductie. Gentoo is anders. LinuxFocus article number door Guido Socher (homepage) Over de auteur:


DOMjudge teamhandleiding

PROS1E1 Handleiding ( ) Kf/Dd/Bd

Handleiding voor Zotero versie 2.0

Een eerste applicatie

Programmeren: Visual Basic

Vakgroep CW KAHO Sint-Lieven

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing.

Een stoomcursus door Edgar de Graaf, november 2006

Het handboek van KMouseTool. Jeff Roush Vertaler/Nalezer: Rob La Lau Vertaler/Nalezer: Natalie Koning Vertaler/Nalezer: Antoon Tolboom

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

eerste voorbeelden in Java

Kennismaken Greenfoot

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

DOMjudge teamhandleiding

Bij het opstarten van Small Basic verschijnt er de onderstaande werkomgeving.

Wordpress website beheren

Online c++ leren programmeren:

DELPHI VOOR ELEKTRONICI. Deel 2: Een rekenmachine programmeren CURSUS

3D met Blender: de eerste stapjes

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008

HTML beheren met Perl, HTML::TagReader

Handleiding website. Inloggen Start uw internet browser en ga naar

Zelf een Afsluitknop maken in Windows 10 ( of 7 of 8.x )

Tentamen Inleiding Programmeren (IN1608WI), 2 februari 2012, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Scratch voor mobiel: AppInventor

Handleiding invoegen afbeeldingen en downloadlinks t.b.v. het CMS

Movicon 11. Visualisatie op VIPA Touch Screens Van de VIPA PLC: CPU315 & CPU313. F. Rubben Movicon 11 op VIPA Touch Screens 1

Calligra. Algemene inleiding. Raphael Langerhorst Jost Schenck Vertaler/Nalezer: Natalie Koning

Gebruikershandleiding

Lineaire data structuren. Doorlopen van een lijst

Handleiding website. Inloggen Start uw internet browser en ga naar Laatst bijgewerkt: 17 mei 2008

Access voor beginners - hoofdstuk 25

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

Nog even snel kleine issues oplossen

HTML en CSS. Je website bestaat uit HTML. Dat is een taal die browsers (Internet explorer, Chrome, Safari) kunnen lezen.

Versturen van vanuit een Delphi VCL toepassing

Handleiding van de Bibliotheek: e-books lezen op je e-reader - voor Windows

Handleiding van de Bibliotheek. E-books lezen op je e-reader - voor Windows

Handleiding van de Bibliotheek: e-books lezen op je e-reader - voor Windows en Sony e-reader

Wat is Arduino? Arduino = microprocessor (Atmel)

ProjectHeatmap. Onderzoeksrapport v Dennis Wagenaar

L A TEX-workshop (Handleiding)

Dynamiek met VO-Script

Gebruikershandleiding Versie 1.07

HANDLEIDING Windows XP Deel 1

HD44780 compatibele LCD-displays begrijpen

Handleiding ISaGRAF. Wil men het programma bewaren, dan is het verstandig een back-up te maken: C9 Back-up / Restore

Introductie in C++ Jan van Rijn. September 2013

Handleiding van de Bibliotheek: e-books lezen op je e-reader - voor OS X (Mac)

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

Dennis Wagenaar v 1.0

VAN HET PROGRAMMEREN. Inleiding

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

programmeren Mobiel Mobilofoon 1960 Apple iphone 2007 met ios Nokia Samsung S met Android Motorola Dyna-Tac 1973

Oefenzitting Werken met Java Achtergrond BVP

Installatie van Linux Mint 13

Handleiding Joomla 3.x

Handleiding elas 2.0 Nesibe Balta

PHP-OPDRACHT SITE BOUWEN

Introductie tot Ncurses

MS PowerPoint Les 2. Wanneer we niet te veel tijd willen steken in de opmaak van onze presentatie, kunnen we gebruik maken van sjablonen.

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Datastructuren: stapels, rijen en binaire bomen

Grafiek en dynamisch bereik

Turbo Pascal (deel 1)

Zelftest Java concepten

Android Development CCSS2011

Hoe moet je een prachtige presentatie maken?

Gebruikershandleiding voor de persoonlijke verpakking.

Hoofdstuk 1: Beginnen met GameMaker 2

Cursus Onderwijs en ICT. Programmeren met Visual Basic

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Welkom bij mijn website tutorial (Deel 2)

Website bouwen met frontpage

Programmeren in C ++ met wxwidgets les 5

De Kleine WordPress Handleiding

Transcriptie:

LinuxFocus article number 295 http://linuxfocus.org Grafisch programmeren met GTK door Özcan Güngör <ozcangungor(at)netscape.net> Over de auteur: Sinds 1997 gebruik ik Linux. Vrijheid, flexibiliteit en open broncode. Dat zijn de eigenschappen die mijn hart hebben veroverd. Vertaald naar het Nederlands door: Samuel Derous <cyberprophet(at)linux.be> Kort: In deze serie artikelen, zullen we leren hoe we grafische gebruikersinterfaces (GUI) moeten programmeren door gebruik te maken van GTK. Ik heb er geen idee van hoe lang deze serie zal zijn. Om deze artikelen te begrijpen, zou je volgende dingen over de C programmeertaal moeten kennen: Variabelen Functies Pointers Wat is GTK? GTK (GIMP Toolkit) is een bibliotheek om Grafische gebruikersinterfaces aan te maken. De bibliotheek is onder de GPL licentie beschikbaar. Door gebruik te maken van deze bibliotheek kan je open broncode, gratis of commerciële programma s ontwerpen. De bibliotheek heeft de naam GIMP tookit (GTK) gekregen omdat het in eerste instantie ontworpen was voor het ontwikkelen van de GIMP (General Image Manipulation Program). De auteurs van GTK zijn: Peter Mattis Spencer Kimball Josh MacDonald

GTK is een object-georiënteerd toepassingsgebruikersinterface. Daar het toch in C geschreven is, gebruikt het niettemin het idee van klasses en terugroep functies. Compileren Om GTK programma s te compileren dien je gcc te vertellen wat de GTK bibliotheken zijn, en waar hij ze kan vinden. De gtk-config commando "weet" dit. # gtk-config --cflags --libs De output van dit commando is iets als het volgende (hangt af van het systeem): -I/opt/gnome/include/gtk-1.2 -I/opt/gnome/include/glib-1.2 -I/opt/gnome/lib/glib /include -I/usr/X11R6/include -L/opt/gnome/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -l Xext -lx11 -lm De verklaring voor deze parameters zijn: -l bibliotheek: zoekt naar bibliotheken in de vorm van library.a in de gedefinieerde paden -L pad: voegt een pad toe om de bibliotheken te zoeken. -I pad: voegt een pad toe om te zoeken naar header-bestanden die in het programma gebruikt worden. Het volgende commando kan gebruikt worden om een GTK programma, hello.c genaamd, te compileren: gcc -o hello hello.c gtk-config --cflags --libs De input die na de -o parameter gebruikt wordt, is de naam van het gecompileerde programma. Een eerste programma Er wordt aangenomen dat GTK op je systeem is geïnstalleerd. De laatste versie van GTK kan gevonden worden op ftp.gtk.org. Laten we ons eerste programma schrijven. Dit programma maakt een leeg venster van 200x200 pixels breed. int main( int argc, char *argv[] )

gtk_init (&argc, &argv); gtk_widget_show (window); GtkWidget is een variabele type om verschillende componenten zoals window, button, label te definiëren... In dit voorbeeld wordt een venster op de volgende manier gedefinieerd: void gtk_init(int *argc, char ***argv) initialiseert de toolkit en verkrijgt de parameters die in de shell worden ingegeven. Deze functie moet gebruikt worden nadat de componenten gedefinieerd zijn. GtkWidget *gtk_window_new(gtkwindowtype windowtype) ontwerpt een nieuw venster. De volgende venster types zijn mogelijk: GTK_WINDOW_TOPLEVEL GTK_WINDOW_DIALOG GTK_WINDOW_POPUP void gtk_widget_show(gtkwidget *widget) wordt gebruikt om het component in een venster weer te geven. Nadat een component gedefinieerd is en de attributen veranderd, dient deze functie gebruikt te worden. void gtk_main(void) bereidt vensters en alle componenten die op het scherm moeten verschijnen voor. Deze functie dient op het einde van GTK programma s gebruikt te worden. Laten we enkele venstereigenschappen zoals titel, grootte, positie... gebruiken void gtk-window_set_title(gtkwindow *window,const gchar *title) wordt gebruikt om een titel aan window te geven of een titel te veranderen. Eerste parameter van deze functie is GtkWindow type. Maar de variabele van window bevindt zich in GtkWidget type. Wanneer we dit zullen compileren, zullen we hierover gewaarschuwd worden. Terwijl het gecompileerde programma zal werken, is het beter om het te verbeteren. Daarvoor wordt GTK_WINDOW(GtkWidget *widget) gebruikt. De tweede parameter title is in gchar type. gchar wordt in de glib bibliotheek gedefinieerd en is hetzelfde als het char type. void gtk_window_set_default_size(gtkwindow *window, gint width, gint height) stelt de grootte van window in. Net zoals gchar, wordt gint gedefinieerd in glib en is hetzelfde als int. de functie void gtk_window_set_position(gtkwindow *window, GtkWindowPosition position) stelt de grootte in van window.position en kan zijn:

GTK_WIN_POS_NONE GTK_WIN_POS_CENTER GTK_WIN_POS_MOUSE GTK_WIN_POS_CENTER_ALWAYS Hier is een voorbeeld: int main( int argc, char *argv[] gtk_init (&argc, &argv); gtk_window_set_title(gtk_window(window),"ýlk Program"); gtk_window_set_position(gtk_window(window),gtk_win_pos_center); gtk_window_set_default_size(gtk_window(window),300,300); gtk_widget_show (window); Signalen en events In GUIs, dient je gebruik te kunnen maken van het toetsenbord en de muis, zodat je bijvoorbeeld op een knop kunt klikken. Daarvoor wordt de volgende GTK functie gebruikt: guint gtk_signal_connect_object(gtkobject *object,const gchar *name,gtksignalfunc func,gtkobject *slot_object); object is het component dat signalen uitzendt. b.v. als je wilt weten of er op een knop geklikt is, zal het object button.name zijn, name zal de naam van het event bevatten, die kan bestaan uit: event button_press_event button_release_event motion_notify_event delete_event destroy_event expose_event key_press_event key_release_event enter_notify_event leave_notify_event configure_event

focus_in_event focus_out_event map_event unmap_event property_notify_event selection_clear_event selection_request_event selection_notify_event proximity_in_event proximity_out_event drag_begin_event drag_request_event drag_end_event drop_enter_event drop_leave_event drop_data_available_event other_event funct is de naam van de functie die aangeroepen zal worden wanneer de gebeurtenis plaats vindt. Hier volgt een voorbeeld: void close( GtkWidget *widget,gpointer *data) gtk_main_quit(); int main( int argc,char *argv[] ) gtk_init (&argc, &argv); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (close), NULL); gtk_widget_show (window); De functie gtk_signal_connect (GTK_OBJECT (window), "destroy",gtk_signal_func (close), NULL) Luistert naar de vernietigingsevent van het venster. Wanneer men probeert het venster te sluiten, wordt de close functie aangeroepen. De close functie roept gtk_main_quit() aan en het programma wordt beëindigd. Details over signalen en gebeurtenissen worden later uitgelegd...

Een doodgewone knop Gewone knoppen worden over het algemeen gebruikt om bepaalde dingen te doen wanneer er op de knop wordt gedrukt. In de GTK bibliotheek zijn er twee manieren om een knop te maken: 1. GtkWidget* gtk_button_new (void); 2. GtkWidget* gtk_button_new_with_label (const gchar *label); De eerste functie maakt een knop zonder label aan (er wordt niets op de knop geschreven). De tweede maakt een knop met een label aan (het label wordt op de knop geschreven). We zullen hier een nieuwe functie gebruiken: void gtk_container_add(gtkcontainer *container,gtkwidget *widget) Met het gebruik van deze functie is het mogelijk een knop aan te maken (in het algemeen met alle componenten) die op het venster zal verschijnen (in het algemeen in een vierkant venster). In het volgende voorbeeld is de container een venster en het component die moet worden toegevoegd een knop. Later zullen we over enkele andere containers leren. Het belangrijkste van een knop is om te weten of erop geklikt is of niet. Voor dit doel wordt weer de gtk_signal_connect functie gebruikt. Met deze functie zal een andere functie aangeroepen worden en zal de functionaliteit "achter" de knop worden uitgevoerd. Hier volgt een voorbeeld: void close( GtkWidget *widget,gpointer *data) gtk_main_quit(); void clicked(gtkwidget *widget,gpointer *data) g_print("button Clicked\n"); int main( int argc,char *argv[] ) GtkWidget *window,*button; gtk_init (&argc, &argv); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (close), NULL); button=gtk_button_new_with_label("button"); gtk_container_add(gtk_container(window),button); gtk_signal_connect(gtk_object(button),"clicked", GTK_SIGNAL_FUNC(clicked),NULL); gtk_widget_show(button);

gtk_widget_show(window); Site onderhouden door het LinuxFocus editors team Özcan Güngör "some rights reserved" see linuxfocus.org/license/ http://www.linuxfocus.org Vertaling info: tr --> -- : Özcan Güngör <ozcangungor(at)netscape.net> tr --> en: Özcan Güngör <ozcangungor(at)netscape.net> en --> nl: Samuel Derous <cyberprophet(at)linux.be> 2005-01-14, generated by lfparser_pdf version 2.51