Zaawansowany kurs jezyka Python
Transkrypt
Zaawansowany kurs jezyka Python
Zaawansowany kurs języka Python GTK+, cd Marcin Młotkowski 1 grudnia 2011 Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Plan wykładu 1 Projektowanie interfejsów Podstawy pracy z Glade Gazpacho 2 Wątki w GTK+ Zadania okresowe Prawdziwe wątki 3 GNOME Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Co to jest Glade to graficzne narzędzie do projektowania interfejsów dla środowiska GTK+/GNOME. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Schemat działania (Glade-3) Glade produkuje plik XML, w którym jest opisany interfejs; Aplikacja ”wczytuje” ten plik i buduje interfejs; Glade-3 jest niezależny od języka. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Marcin Młotkowski Podstawy pracy z Glade Gazpacho Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Użycie projektu GtkBuilder Biblioteka budująca z XML interfejs graficzny. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Użycie projektu GtkBuilder Biblioteka budująca z XML interfejs graficzny. libglade Poprzednia biblioteka, używa innego, niekompatybilnego XML’a. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Użycie projektu GtkBuilder Biblioteka budująca z XML interfejs graficzny. libglade Poprzednia biblioteka, używa innego, niekompatybilnego XML’a. Konwersja plików gtk builder convert Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Budowanie okna Ważne Trzeba pamiętać, że kontrolki mają swoje nazwy. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Budowanie okna Ważne Trzeba pamiętać, że kontrolki mają swoje nazwy. builder = gtk.Builder() builder.add from file(”wyklad.glade”) window = builder.get object(”okno”) window.show() gtk.main() Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Podłączanie sygnałów Ważne Podczas budowania interfejsu trzeba wskazać, jakim sygnałom odpowiadają jakie procedury obsługi (handlery). Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Podłączanie sygnałów Ważne Podczas budowania interfejsu trzeba wskazać, jakim sygnałom odpowiadają jakie procedury obsługi (handlery). builder = gtk.Builder() builder.add from file(”wyklad.glade”) builder.connect signals({ ”on window destroy” : gtk.main quit }) window = builder.get object(”okno”) window.show() gtk.main() Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Podłączanie menu Łatwe Tak samo jak w przypadku innych sygnałów. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Podłączanie menu Łatwe Tak samo jak w przypadku innych sygnałów. Dokładniej: trzeba w Glade wskazać procedurę obsługi (wpisać jej nazwę) dla sygnału activated; powiązać nazwę z prawdziwą procedurą: builder.connect signals({ ”on window destroy” : gtk.main quit, ”on menu koniec” : lambda widget : akcja(widget) }) Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Bardziej obiektowo class Rysownik: def init (self): builder = gtk.Builder() builder.add from file(”wyklad.glade”) self.window = builder.get object(”okno”) builder.connect signals(self) def on window destroy(self, widget, data=None): pass def koniec(self, widget): pass rysunek = Rysownik() rysunek.window.show() gtk.main() Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Gazpacho Inne narzędzie (napisane w PyGTK) do projektowania interfejsów graficznych, produkuje pliki zgodne z GtkBuilder. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Podstawy pracy z Glade Gazpacho Gazpacho Inne narzędzie (napisane w PyGTK) do projektowania interfejsów graficznych, produkuje pliki zgodne z GtkBuilder. Kiwi Z projektem Gazpacho jest związana biblioteka Kiwi (napisana w Pythonie), która w założeniu ma być ”lepszym GTK+”. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Plan wykładu 1 Projektowanie interfejsów Podstawy pracy z Glade Gazpacho 2 Wątki w GTK+ Zadania okresowe Prawdziwe wątki 3 GNOME Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Timeouty Uruchamianie zadań okresowych: id = gobject.timeout add(milisec, heart beat, ...) Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Timeouty Uruchamianie zadań okresowych: id = gobject.timeout add(milisec, heart beat, ...) Funkcja heart beat powinna zwrócić True, w przeciwnym przypadku nie będzie dalej powtarzana. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Timeouty Uruchamianie zadań okresowych: id = gobject.timeout add(milisec, heart beat, ...) Funkcja heart beat powinna zwrócić True, w przeciwnym przypadku nie będzie dalej powtarzana. Wyłączenie zadania gobject.source remove(id) Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Funkcje idle Co program robi jak nic nie robi? Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Implementacja funkcji Uruchamianie zadań gdy nic się nie dzieje: id = gobject.idle add(milisec, heart beat, ...) Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Implementacja funkcji Uruchamianie zadań gdy nic się nie dzieje: id = gobject.idle add(milisec, heart beat, ...) Funkcja heart beat powinna zwrócić True, w przeciwnym przypadku nie będzie dalej powtarzana. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Implementacja funkcji Uruchamianie zadań gdy nic się nie dzieje: id = gobject.idle add(milisec, heart beat, ...) Funkcja heart beat powinna zwrócić True, w przeciwnym przypadku nie będzie dalej powtarzana. Wyłączenie zadania gobject.source remove(id) Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Monitorowanie we/wy Można kontrolować otwarte pliki (w tym pliki związane z sieciami, gniazdami czy potokami). Co możemy monitorować (warunki) są dane gotowe do odczytu gobject.IO IN gobject.IO OUT plik jest gotów do zapisu są pilne dane do odczytu gobject.IO PRI gobject.IO ERR błąd gobject.IO HUP zerwanie połączenia Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Jak monitorować Włączenie monitorowania id = gobject.io add watch(plik(otwarty), warunek, monitor) Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Jak monitorować Włączenie monitorowania id = gobject.io add watch(plik(otwarty), warunek, monitor) funkcja monitorująca def monitor(źródło, warunek): Funkcja powinna zwrócić True jeśli ma dalej monitorować. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Korzystanie z wątków Dobra wiadomość threading.Thread działa. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Korzystanie z wątków Dobra wiadomość threading.Thread działa. Zła wiadomość Ale nie jest to takie proste. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Wersja 1. Wątek nie odwołuje się do GUI Przed wywołaniem gtk.main() import gobject gobject.threads init() Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Przykład button.connect(”clicked”, lambda x: threading.Thread(target=hello).start()) Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Interakcja wątków z GUI Inicjowanie gtk.gdk.threads init() Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Uruchomienie aplikacji gtk.threads enter() gtk.main() gtk.threads leave() Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Szkielet kodu w wątku gtk.threads enter() try: myentry.set text(”foo”) finally: gtk.threads leave() Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zadania okresowe Prawdziwe wątki Szkielet kodu w wątku, wersja polecana with gtk.gdk.lock: ... Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Plan wykładu 1 Projektowanie interfejsów Podstawy pracy z Glade Gazpacho 2 Wątki w GTK+ Zadania okresowe Prawdziwe wątki 3 GNOME Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Co to jest GNU Network Object Model Environment Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME A co jest ważne Więcej kontrolek (rozbudowane GTK+); desktop, aplikacje mogą się integrować z desktopem; własne aplety (dla środowiska GNOME); wsparcie dla tworzenia róznych wersji językowych. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME GLADE i GNOME GNOME używa LibGlade Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Przykład import gtk import gnome.ui import gtk.glade gnome.init(”Wykład”, ”0.1”) aplikacja = gtk.glade.XML(”gnome.glade”) gtk.main() Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Zła wiadomość Są błędy, ale libglade nie jest już naprawiane. Marcin Młotkowski Zaawansowany kurs języka Python Projektowanie interfejsów Wątki w GTK+ GNOME Jak ktoś potrzebuje aplikacja = gnome.ui.App(”Aplikacja”, ”Okno aplikacji”) aplikacja.show() gtk.main() Marcin Młotkowski Zaawansowany kurs języka Python