2. Komma igång

2.1. Enkelt exempel

För att starta med vår handledning skapar vi det enklast tänkbara programmet. Detta program kommer skapa ett tomt fönster som är 200 x 200 bildpunkter stort.

_images/simple_example.png
1
2
3
4
5
6
7
8
9
import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

win = Gtk.Window()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

Vi kommer nu förklara varje rad i exemplet.

import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

I början måste vi importera Gtk-modulen för att kunna komma åt GTK+:s klasser och funktioner. Då en användares system kan ha flera versioner av GTK+ installerade samtidigt så vill vi säkerställa att då vi importerar Gtk så refererar det till GTK+ 3 och inte någon annan version av biblioteket, vilket är syftet med satsen gi.require_version('Gtk', '3.0').

Nästa rad skapar ett tomt fönster.

win = Gtk.Window()

Följt av att ansluta till fönstrets borttagningshändelse för att säkerställa att programmet stängs om vi klickar på x för att stänga fönstret.

win.connect("destroy", Gtk.main_quit)

I nästa steg visar vi fönstret.

win.show_all()

Slutligen startar vi GTK+-bearbetningsslingan som vi avslutar när fönstret stängs (se rad 6).

Gtk.main()

För att köra programmet, öppna en terminal, ändra till filens katalog, och mata in:

python simple_example.py

2.2. Utökat exempel

För något som är lite mer användbart kommer här PyGObject-versionen av det klassiska ”Hej världen”-programmet.

_images/extended_example.png
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk


class MyWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="Hello World")

        self.button = Gtk.Button(label="Click Here")
        self.button.connect("clicked", self.on_button_clicked)
        self.add(self.button)

    def on_button_clicked(self, widget):
        print("Hello World")


win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

Detta exempel skiljer sig från det enkla exemplet då vi gör en underklass till Gtk.Window för att skapa vår egen klass MyWindow.

class MyWindow(Gtk.Window):

I klassens konstruktor måste vi anropa superklassens konstruktor. Dessutom säger vi till den att ställa in värdet på egenskapen title till Hello World.

        super().__init__(title="Hello World")

De nästa tre raderna används för att skapa en knappkomponent, ansluta till dess clicked-signal och lägga till den som barn till toppnivåfönstret.

        self.button = Gtk.Button(label="Click Here")
        self.button.connect("clicked", self.on_button_clicked)
        self.add(self.button)

På det viset kommer metoden on_button_clicked() att anropas om du klickar på knappen.

    def on_button_clicked(self, widget):
        print("Hello World")

Det sista blocket, utanför klassen, är väldigt likt det enkla exemplet ovan, men istället för att skapa en instans av den generiska klassen Gtk.Window, så skapar vi en instans av MyWindow.