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

Podobne dokumenty