22.10.2011

Python a glade - první krůčky

První krůčky s vytvářením python gtk aplikací pomocí designeru glade.

Nejprve si nainstalujeme balíček glade a potřebné knihovny pro python. Glade slouží jako gui designer, který celý návrh ukládá do formátu XML.

sudo apt-get install glade python-glade

Vytvoříme si je jednoduchý projekt. Postup je celkem jednoduchý a intuitivní. Soubor uložéme jako soubor test.glade.

Po vytvoření dvou tlačítek si vytvoříme jednoduchý program, který bude schopný odchytávat jednotlivé události nad tlačítky. Celý program pak můžete vidět níže. Duležitou metodou je "builder.get_object", ten nám umožňuje získat objekt z návrhu glade a přiřadit mu parametry.

Pro propojení aktivních prvků (tlačítka) s akcí slouží metoda "connect". Pro stisknutí tlačítka použijeme "connect", pro ukončení okna "destroy".

        self.button1.connect("clicked",self.on_click)
        self.button1 = builder.get_object("button1")

celý program vypadá následovně:

#!/bin/python

import sys
try:
    import pygtk
    import gtk
    import gtk.glade
    pygtk.require("2.0")
except ImportError:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    print "ImportError: %s" % (exc_value)
    print "At first, you need install gtk python library."
    print "sudo apt-get install python-gtk2 python-gtk2-dev"
    sys.exit(1)

class MainGtk:
    def __init__(self):
        self.gladefile = "test.glade"  
        builder = gtk.Builder()
        builder.add_from_file(self.gladefile)
        builder.connect_signals(self)

        self.button1 = builder.get_object("button1")
        self.button2 = builder.get_object("button2")

        self.button1.connect("clicked",self.quit)
        self.button2.connect("clicked",self.on_click)

        self.window = builder.get_object("window")
        self.window.connect("destroy",self.quit)
        self.window.show()

    def on_click(self,data):
        print "tisk:", data

    def quit(self,data):
        gtk.main_quit()

if __name__ == "__main__":
    oMain = MainGtk()
    gtk.main()