Aplikacje okienkowe Kurs systemu Unix 1
Najpopularniejsze biblioteki systemu X Tk rozszerzenie j zyka Tcl GTK biblioteka u»ywana w GNOME (pierwotnie w Gimp) Qt biblioteka u»ywana w KDE wxwindows opakowuje oryginalne kontrolki Wszystkie s w znacznym stopniu przeno±ne (Windows, MacOS) Dawniej byªa jeszcze komercyjna biblioteka Moti Umo»liwiaj pisanie programów w C, C++, Pythonie, Perlu oraz w Tcl Kurs systemu Unix 2
Pakiet narz dziowy Tk Interfejs do niego standardowo doª czany do dystybucji Pythona jako moduª Tkinter Najcz ±ciej ªadowany za pomoc from Tkinter import *. Wygl d odrobink maªo trendy. Mo»liwe rozszerzenie: tix, moduª zawieraj cy dodatkowe kontrolki. Kurs systemu Unix 3
Inne mo»liwo±ci w Pythonie PyGTK wersja GTK dla Pythona PyQt wersja Qt dla Pythona wxpython wersja wxwindows dla Pythona wxpython is the best and most mature cross-platform GUI toolkit, given a number of constraints. The only reason wxpython isn't the standard Python GUI toolkit is that Tkinter was there rst. Guido van Rossum Kurs systemu Unix 4
Tcl/Tk a Tkinter Pisz c programy w Tkinter, cz sto si gamy do dokumentacji Tcl/Tk Cho Tcl jest zupeªnie innym j zykiem ni» Python, wiele rzeczy w Tkinter da si ªatwo wydedukowa, przygl daj c si konstrukcjom Tcl/Tk Kurs systemu Unix 5
Podstawy Tcl/Tk Interpreterem Tcl/Tk jest program wish. Gdy chcemy by wish przeczytaª co± z pliku to u»ywamy opcji -f. Po uruchomieniu wish otwiera si okienko aplikacji, mo»emy korzysta z konsoli i z niej wprowadza polecenia zmieniajace sytuacj w okienku aplikacji. Kurs systemu Unix 6
Witaj ±wiecie! #!/usr/local/bin/wish -f pack [button.b -text "Witaj\n±wiecie!" \ -justify center \ -width 20 \ -command {puts "Cze±!"} ] Kurs systemu Unix 7
Komentarz do przykªadu Polecenie button tworzy przycisk o nazwie.b i o pewnych wªa±ciwo±ciach (-text,...) Polecenie pack umieszcza kontrolk w oknie aplikacji. Nazwy kontrolek oddaj ich hierarchi :.a.b.c oznacza,»e kontrolka a jest na najwy»szym poziomie, jest ona ojcem b, który z kolei jest ojcem c. Mo»na zmienia warto±ci pól istniej cych kontrolek za pomoc polecenia configure, pisz c przykªadowo:.b config -text "Dzie«dobry!" Kurs systemu Unix 8
Witaj ±wiecie (w Pythonie) from Tkinter import * root = Tk() # gdyby byª nam potrzebny # obiekt gªównego okna def callback(): print "Cze± tu Python" b = Button(text="Witaj ±wiecie", width=20, justify b.pack() = "center", command=callback) mainloop() # tu si zaczyna dziaªanie # zdeterminowane interfejsem Kurs systemu Unix 9
Ogólne zasady translacji Tcl/Tk -> Python Nazwy z tcl/tk typu.appl.ramka.przyciskwramce zas? pione s normalnymi nazwami obiektów Pythona. Poleceniu button tworz cemu przycisk odpowiada klasa Button, oczywi±cie Button(...) jako konstruktor jest te» poleceniem tworz cym przycisk. Czyli: button.fred =====> fred = Button() button.panel.fred =====> fred = Button(panel).fred configure -fg red =====> fred["fg"] = red ALBO=> fred.config(fg = "red") Wywoªanie polecenia dla kontrolki tªumaczy si na wywoªanie metody dla obiektu kontrolki. Kurs systemu Unix 10
Tk i Python (2) Pewne opcje Tk przyjmuj warto±ci ze sko«czonego zbioru. Realizowane jest to za pomoc napisów. Opcje boolowskie wymagaj staªych 0 oraz 1, wzgl dnie napisów 'yes' albo 'no'. Opis polece«tk jest (najprawdopodobniej) dost pny za po±rednictwem systemowego podr cznika, przykªadowo man pack albo man grid. Kurs systemu Unix 11
Zmienne Tk Kontrolki cz sto maj zwi zan ze sob zmienn do przekazywania warto±ci wczytywanych przez kontrolk. Zmienne mog by dzielone przez kilka kontrolek. Naturalne takie sytuacje to: przyciski Radiobuttons albo para suwak+maªe okienko edycyjne. Kontrolka musi mie prawo zmieniania warto±ci zmiennej, a zatem nawet je±li zmienna jest Int to powinna by obiektem zmiennym Tkinter deniuje klasy (dziedzicz ce z Variable): StringVar, IntVar, DoubleVar oraz BooleanVar Zmiana i odczytywanie warto±ci tych obiektów powinna by wykonywana metodami set oraz get. Mo»na zdeniowa wªasn klas dziedzicz c z Variable. Kurs systemu Unix 12
Co mog kontrolki? Poniewa» kontrolkom odpowiadaj klasy Pythona, mo»na wywoªa dir(nazwaklasykontrolki), aby dowiedzie si, co ma ona do zaoferowania. Program >>> L = dir(listbox) len(l) da w wyniku pora»aj c liczb 206. Pami tamy równie» o atrybucie doc, przykªadowo Listbox. doc oznacza napis: 'Listbox widget which can display a list of strings.' O konkretnym atrybucie mo»emy si dowiedzie pisz c: print Listbox.pack. doc Kurs systemu Unix 13
O klasach kontrolek ogólnie Kontrolki dziedzicz z klasy Widget (180 elementów). Kontrolki maj metody oraz opcje (razem 206, dla Listbox). Opcje okre±laj zachowanie i wygl d kontrolki. Opcje ustala si podczas wykonanie kostruktora oraz za pomoc metody configure (alternatywn form jest przeci»ony operator indeksowania) Pierwszym parametrem kontruktora jest okno macierzyste (domy±lnie gªówne okno aplikacji), nast pne parametrzy podajemy zwykle za pomoc sªów kluczowych. Równie» za pomoc sªów kluczowych podajemy parametry configure. Kurs systemu Unix 14
Ramki Klasa Frame opisuje ramk (pojemnik na inne rzeczy). Opcja relief deniuje styl obramowania, opcja bg z argumentem n mówi,»e obramowanie ma mie n pikseli dªugo±ci. W nast pnym przykªadzie u»ywane s nast puj ce opcje polecenia pack: 1) side z argumentem left (z której strony) 2) padx, pady z argumentem liczbowym, mówi ce o wielko±ci odst pu (domy±lnie przyklejamy, czyli odst p 0) Kurs systemu Unix 15
Przykªad z ramkami #!/usr/bin/python from Tkinter import * root = Tk() root["bg"] = "steelblue" F = [] for r in [ 'sunken', 'raised', 'flat', 'ridge', 'groove']: F.append( Frame( width="0.5i", height="0.5i", relief=r, bd= 2)) for fr in F: fr.pack(side="top", padx=10, pady=10) mainloop() Kurs systemu Unix 16
Etykieta Etykieta to nieaktywny tekst o pewnych parametrach. Odpowiada jej klasa Label Przykªadowe opcje: 1. Podstawowa text mówi o tre±ci etykiety. 2. Opcja justify, z argumentem 'left', 'right', 'center' mówi o formatowaniu tekstu 3. wraplength mówi o szeroko±ci tekstu (domy±lnie w pikselach, ale mo»liwe inne jednostki) Kurs systemu Unix 17
Przyciski Mamy trzy rodzaje przycisków: zwykªe, pola wyboru oraz pola opcji. Odpowiadaj im klasy: Button, Radiobutton oraz Checkbutton. Niektóre opcje: 1. Opcja variable mówi o zmiennej przechowywuj cej wynik przycisku. 2. Opcje onvalue oraz -offvalue dla checkbox-ów mówi o warto±ci tej zmiennej, w odpowiednim przypadku 3. Opcja value dla pól opcji ma analogiczn funkcj. Kurs systemu Unix 18
Troch wi kszy program (przykªad) Wybór jednej z trzech opcji aktywny jedynie wówczas, gdy wª czony przycisk typu checkbutton i do tego dwa przyciski 1. mówi cy o stanie wczytywania 2. ko«cz cy dziaªanie programu Kurs systemu Unix 19
Troch wi kszy program Na pocz tku tworzymy zmienne from Tkinter import * glodny = BooleanVar(); glodny.set(1) danie = StringVar(); danie.set('mielonka') oraz przyciski do wyboru opcji RB = []; dania = ['mielonka','jajecznica','d»em'] for i in range(len(dania)): RB.append( Radiobutton(text = dania[i], value = dania[i], justify="left", variable = danie)) Kurs systemu Unix 20
Troch wi kszy program (2) Funkcja dla przycisku opcji def zglodnialem(): if glodny.get(): for i in range(3): RB[i].configure(state = "normal") else for i in range(3): RB[i].configure(state = "disabled") oraz sam przycisk opcji cb = Checkbutton( text = "Jeste± gªodny", command=zglodnialem, relief = "flat" variable = glodny, onvalue=1, offvalue= 0) Kurs systemu Unix 21
Troch wi kszy program (3) Do sterowania aplikacj sªu» dwa przyciski show = Button(text = "Poka» warto±ci", command = pokazzmienne) koniec = Button(text = "Koniec", command = root.quit) Obsªuga przycisku Poka» zmienne def pokazzmienne(): if not glodny.get(): print "Nie jestes glodny!" else print "Masz ochot na " + danie.get() Kurs systemu Unix 22
Troch wi kszy program (4) Ustawienie na ekranie tego wszystkiego (w prostok tnej siatce) cb.grid(.lan -row 1 -column 0 -sticky "w" RB[0].grid(row=0, column=1, sticky= "w") RB[1].grid(row=1, column=1, sticky= "w") RB[2].grid(row=2, column=1, sticky= "w") show.grid(row=3, column=0, sticky= "w" koniec.grid(row 3, column= 1, sticky= "w" Zostaªo jeszcze uruchomi mainloop() Kurs systemu Unix 23
Wczytywanie tekstu Klasa Entry opisuje kontrolk sªu» c do wpisywania tekstu. Opcja textvariable = n oznacza,»e tekst traa do zmiennej n. Opcja show '*' oznacza,»e zamiast tekstu pojawiaj si gwiazdki. Kurs systemu Unix 24
Suwak Za pomoc suwaka wczytujemy liczb caªkowit. Suwak opisuje klasa Scale, ma on opcje: orient, orientacja, np. 'horizontal' _from oraz to, zasi g liczby tickinterval ja cz sto podziaªka variable zmienna. length dªugo± Mo»na poª czy suwak z polem edycyjnym za pomoc tej samej zmiennej. Kurs systemu Unix 25
Geometria U»ywa si nast puj cych jednostek: m, c, i, p oznaczaj cych, odpowiednio: milimetry, centymetry, cale, punkty ekranowe. W opcjach wymagaj cych argumentu b d cego dªugo±ci, nale»y po liczbie wypisa jej miano, np length = '3i'. Kurs systemu Unix 26
Metoda pack Umieszcza kontrolki poczynaj c od kraw dzi okna/kontrolki nadrz dnej. Ka»da kontrolka wie, która kontrolka jest dla niej nadrz dna. U»ywali±my opcji padx, pady. Opcje ipadx, ipady sprawiaj»e kontrolka si rozszerza i puchnie tak, by przerwa byªa minimalna. Kurs systemu Unix 27
Metoda grid Polecenie grid sªu»y do tworzenia tabel i rozmieszczania ró»nych rzeczy w prostok tnej siatce. Kontrolk umieszcza si w podrz dnym oknie, poªo»enie okre±laj opcje row oraz column. Mo»na rozci gn obszar kontrolki za pomoc rowspan n oraz columnspan W ramach przydzielonego obszaru mo»na rozci gac kontolk za pomoc opcji sticky. Przykªadowo sticky e zakotwicza konrolk po prawej stronie, sticky ew sprawia,»e mo»e si ona rozci gac ze wschodu na zachód. Kurs systemu Unix 28
Uwaga! Nie nale»y ª czy w jednym oknie metod pack oraz grid! Kurs systemu Unix 29
Powi zania Metoda bind ª czy zdarzenie z kontrolk i poleceniem. Zawiera dwa argumenty: napis opisuj cy zdarzenie oraz funkcj obsªuguj c zdarzenie. Ta funkcja powinna bra argument typu Event z niego da si odczyta ró»ne informacje dotycz ce zdarzenia. Przykªadowe nazwy zdarze«<keypress-left>, <Control-Button-1>, <Alt-Button-2>, <ButtonRelease-1>, <Enter>, <Double-Button-2> <KeyPress-Right>, <Alt-KeyPress-Space>... Wi cej przykªadów mo»na uzyskac pisz c man bind (cho pod t nazw mo»e by polecenie basha) lub man event. Kurs systemu Unix 30
Zdarzenia Zdarzenie (typ event) ma takie mi dzy innymi atrybuty: x,y,x_root,y_root wspóªrz dne zdarzenia (we wspóªrz dnych okna zdarzenia lub okna gªównego) widget kontrolka, której zdarzenie dotyczy keysym nazwa klawisza, na przykªad 'left' time czas zdarzenia Kurs systemu Unix 31