Wprowadzenie do PyGTK
14 July 2008
Comments
PyGTK to Pythonowe API dla biblioteki GTK+ służącej do tworzenia interfejsów graficznych. GTK+ wykorzystywana jest m.in. przez środowiska graficzne Gnome i XFCE. Samo PyGTK wymaga praktycznie tylko GTK+ (bez zależności związanymi z Gnome czy XFCE). Tak jak w przypadku PyQT interfejsy można określać bezpośrednio w kodzie aplikacji, lub też zastosować aplikację do "rysowania" interfejsów - Glade.Zalety i Wady
- Jest to biblioteka przenośna, choć nie działa to perfekcyjnie
- Po PyQT najbardziej rozbudowana, dobrze wygląda pod Linuksem/Unixami (w odróżnieniu do tk_inter i częściowo wxPython)
- Wiele artykułów w sieci, lecz starsze opisują przestarzałe wersje PyGTK
Instalacja
PyGTK jak i Glade znajduje się w repozytorium praktycznie każdej dystrybucji (chyba że bardzo nie lubi ona GTK+) i instalacja nie powinna stwarzać problemów. Na stronie GTK+ można pobrać pakiet dla MS Windows zawierający również Glade. Podobnie na stronie PyGTK dostępna jest też wersja dla MS Windows.Prosta aplikacja PyGTK + Glade
Uruchom Glade (nazwa "glade-3" lub starsze "glade-2"). Pojawi się aplikacja z kilkoma blokami pełniącymi różne funkcje: Po lewej znajduje się lista widżetów jakie możemy stosować do tworzenia interfejsów. Tworzenie zaczynamy od wybrania jakiegoś "okna" z pierwszej grupy "Toplevels". By móc umieścić w oknie więcej niż jeden widżet stosuje się kontenery ("Containers") dzielące okna na kilka części - a w każdej części można umieścić jeden widżet. Po prawej mamy kilka zakładek umożliwiających konfiguracje widżetów oraz aktywację sygnałów.Klinkij na ikonę standardowego okna - pojawi się ono pośrodku aplikacji. Następnie zaznacz w menu po lewej "Etykietę" i kliknij na środek okna naszej aplikacji. Otrzymamy coś takiego: Jak widać po prawej stronie w menu możemy podać tekst jaki ma być wyświetlany. "Nazwa" jest o tyle ważna iż określa nazwę widżetu od strony kodu. By nasza aplikacja PyGTK działała musimy jeszcze edytować właściwość "Widoczność" dla głównego okna i ustawić ją na "Tak": Zapisujemy interfejs jako "kliknij.glade". W tym samym katalogu tworzymy plik "start.py" o kodzie:
# -*- coding: utf-8 -*-
import sys
# import PyGTK
import pygtk
pygtk.require("2.0")
import gtk
import gtk.glade
# bazowa klasa
class HellowWorldGTK:
def __init__(self):
# wybieramy plik *glade
self.gladefile = "kliknij.glade"
self.wTree = gtk.glade.XML(self.gladefile)
# pobieramy główne okno
self.window = self.wTree.get_widget("MainWindow")
if (self.window):
self.window.connect("destroy", gtk.main_quit)
# wywołanie aplikacji
if __name__ == "__main__":
hwg = HellowWorldGTK()
gtk.main()
Sygnały i Sloty
Jak w PyQT mamy tutaj system sygnałów i slotów, który jednak funkcjonuje nieco inaczej. W Glade możemy włączyć dany sygnał dla danego widżeta, a w kodzie umieszczonym w "start.py" musimy połączyć ten sygnał z naszym slotem (lub slotem predefiniowanym z PyGTK) Otwórz stworzony przed chwilą interfejs w Glade, usuń etykietę (zaznacz widżet i wciśnij "Del") a następnie wybierz "przycisk" i umieść go w oknie: Jak widać standardowa nazwa dla przycisku to "button1". Przejdź teraz do zakładki "Signals" i dla "clicked" kliknij w pole obok w kolumnie "Funkcja" i wybierz "on_button1_clicked". Zapisz interfejs. Oto jak wygląda zmodyfikowany kod start.py:# -*- coding: utf-8 -*-
import sys
import pygtk
pygtk.require("2.0")
import gtk
import gtk.glade
class HellowWorldGTK:
def __init__(self):
# wybieramy plik *glade
self.gladefile = "kliknij.glade"
self.wTree = gtk.glade.XML(self.gladefile)
# pobieramy główne okno
self.window = self.wTree.get_widget("MainWindow")
if (self.window):
self.window.connect("destroy", gtk.main_quit)
# tworzymy słownik i łączymy sygnał ze slotem
dic = { "on_button1_clicked" : self.button_clicked }
self.wTree.signal_autoconnect(dic)
def button_clicked(self, widget):
print "To działa!"
if __name__ == "__main__":
hwg = HellowWorldGTK()
gtk.main()
dic = { "on_button1_clicked" : self.button_clicked } self.wTree.signal_autoconnect(dic)
Dodatki do PyGTK
pygtkglext to API OpenGL dla PyGTK, rtgraph udostępnia kilka widżetów do tworzenia wykresów w czasie rzeczywistym. gazpacho to aplikacja PyGTK podobna do Glade służąca do tworzenia interfejsów. Najwięcej dodatków oferuje jednak GNOME w pakietach gnome-python i gnome-python-extras, które wymagają wielu pakietów wspomnianego środowiska. Jednym z ciekawszych widżetów zawartych w tych dwóch pakietach jest pygtkmozembed czyli widżet Mozilli umożliwiający tworzenie przeglądarki www na bazie silnika Gecko. Znajduje się on w gnome-python-extras lecz nie wymaga Gnome (jedynie PyGTK i Firefoxa lub SeaMokey). Jeżeli nie chcesz instalować połowy Gnome wymuś pominięcie zależności w swoim menedżerze pakietów, lub pobierz kod źródłowy, rozpakuj i skompiluj. ./configure sprawdzi co może zostać zbudowane, a co nie:The following modules will be built: egg.trayicon gtkmozembed (linking to firefox) The following modules will NOT be built: gtkhtml2 egg.recent gtkspell gdl gda gksu gksu.ui
export MOZILLA_FIVE_HOME="/usr/lib/xulrunner-1.9/"
Pobierz źródła
Pobierz źródła"gtk1" i "gtk2" to odpowiednio przykłady z etykietą i przyciskiem z tego artykułu. "gtk3" zawiera prostą przeglądarkę www bazującą na pygtkmozembed (podłączony jest jedynie pasek adresu strony)
RkBlog
Comment article