Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Stručný průvodce vytvářením GUI v Python / Tk

Podobné prezentace


Prezentace na téma: "Stručný průvodce vytvářením GUI v Python / Tk"— Transkript prezentace:

1 Stručný průvodce vytvářením GUI v Python / Tk
Eduard Sojka URO, Léto 2003/4 VŠB – Technická univerzita Ostrava

2 Python / Tk: stručný průvodce
Co děláme? Proč? Skriptovací jazyky připraví nejobvyklejší použití knihoven GUI. Jste pak stručnější, rychlejší a nemusíte znát všechny detaily. Skriptovací jazyky lépe vyhovují pro sestavování aplikací. Knih. GUI Skript. jazyk

3 Python / Tk: stručný průvodce
Co je Python, Tkinter? Python je obecný programovací jazyk vhodný mimo jiné i pro skriptování a vytváření GUI. Do jazyka Python byla nejprve vestavěna knihovna Tk (modul Tkinter). Postupem času byly vestavěny i knihovny další. Např. wxWindows, Qt, GTK (wxPython, QtPython, GTKPython) Použití Pythonu nemusí být ale vhodné vždy (nevhodný např. pro intenzivní matematické a technické výpočty – v těchto částech je na místě použít zejména C, C++).

4 Python / Tk: stručný průvodce
Několik důvodů, proč byste mohli o tvorbě GUI s využitím jazyka Python něco vědět Jazyk Python je jednoduchý. Lze se jej rychle naučit. Datové struktury list a dictionary usnadňují sestavování aplikací a vytváření GUI. Dále bez deklarací proměnných. Proto méně kódu a rychlejší práce než v C/Java. Python je „pěkný“ jazyk (na rozdíl od Tcl). Existuje na všech platformách (a také dokonce i celý realizovaný v Javě – Jython).

5 Python / Tk: stručný průvodce
Nevýhoda Jazyk je interpretovaný. K vaší aplikaci musí být interpret. Nebo musíte interpret do vaší aplikace „přibalit“. Nástroje jsou zdarma (vyvíjeny jako podobně jako Linux) Typické použití (v kontextu tvorby GUI) Vhodný pro vytváření prototypů GUI (rychlé provádění změn).

6 Python / Tk: Vzhled programu
Vzhled programu: Definování třídy myApp, __init__ je konstruktor, onTlacitko je metoda. Zarovnávání je důležité. Konce řádků také. Pozor na dvojtečky. class myApp: def __init__(self, master): self.fr = Frame(master) self.bu = Button(self.fr, text='Zmackni', command=self.onTlacitko) self.fr.pack() self.bu.pack() def onTlacitko(self): print 'Zmackl jsi.'

7 Python: Základní datové typy a přiřazování
Elementární datové typy a přiřazování a = 77; b = 3.14 c = j d = e = c / 2.0 uro = ’URO 2003/4’ nadpis = uro[0:3] + " leto" + uro[3:99] print uro, d.imag, 'ještě něco' import math x = math.sqrt(a)*c*c y = math.cos(b)

8 Python: Náhled na použití seznamů
Seznam a několik „cviků“ s ním. predmety = ['URO', 'Java', 'C++', 'PG', 'DAIS'] predmety.append(333) volba = predmety[0:3] volba.remove('Java') volba[0:1] = [] volba.insert(0, 'neco') volba[0:0] = ['AGU', 'DZO'] volba.append(predmety[4]) if volba.count('C++') == 0: volba.append('C++') volba.sort() print volba.pop(3) print 'volba:', volba; print len(volba)

9 Python: Náhled na použití slovníků
Slovník a několik „cviků“ s ním. body = {'URO': 100, 'C++': 99, 'OOP': 98} body['Java'] = 51 print body['C++'] del body['OOP'] print body.keys() print body.has_key('URO') for x in body.keys(): body[x]=0

10 Python: Náhled na použití slovníků
Ještě slovník studenti = ['SOJ11', 'SLA22', 'XXX33'] predmety = ['URO', 'C++', 'Java', 'OOP'] vysledek = dict([(p, 0) for p in predmety]) vysledky = dict([(s, vysledek) for s in studenti]) print vysledky vysledky['SOJ11']['C++'] = 51 print vysledky['SOJ11']

11 Python: Náhled Když už ani nevíme, co je v proměnné: x = ['abc', 'neco'] x = 'ahoj' x = {'nam' : 2220, 'val' : 33} if type(x) == str: print 'Je to retezec.' elif type(x) == list: print 'Je to seznam.' elif type(x) == dict: print 'Je to slovnik.' elif type(x) == float: print 'Je to float.' else: print 'Je to neco jineho.'

12 Python: Několik dalších detailů
Získání obsahu adresáře. import glob a = glob.glob('*.py') print a b = glob.glob('menu?.py') print b

13 Python: Několik dalších detailů
Získání obsahu URL. import urllib2 f = urllib2.urlopen(' print f.read(100) for line in urllib2.urlopen(' if 'Fax:' in line: print line

14 Python: Několik dalších detailů
Komprese, dekomprese a získání CRC kódu. import zlib s = 'uro0 uuro00 urro000 uroo0000 uro0 uuro00' print len(s) t = zlib.compress(s) print len(t) print zlib.decompress(t) print zlib.crc32(t)

15 def __init__(self, master): self.fr = Frame(master)
Python / Tkinter Popiska from Tkinter import * class myApp: def __init__(self, master): self.fr = Frame(master) self.la = Label(self.fr, text='Toto …') self.fr.pack(); self.la.pack() self.fr.master.title('Label 1') root = Tk() app = myApp(root) root.mainloop() label1.py

16 def __init__(self, master): self.fr = Frame(master)
Python / Tkinter Tlačítko s obrázkem class myApp: def __init__(self, master): self.fr = Frame(master) master.title('Button4') self.photo = PhotoImage(file='exit.gif') self.bu = Button(self.fr, image=self.photo, command=self.fr.quit) self.fr.pack() self.bu.pack(padx=8, pady=8) button4.py

17 def __init__(self, master): self.fo = StringVar()
Python / Tkinter Radio buttons class myApp: def __init__(self, master): self.fo = StringVar() self.la = Label(master, text='A pair of …') self.r1 = Radiobutton(master, text='Times', variable=self.fo, value='Times', command=self.ukaz) self.r2 = Radiobutton(master, text='Helvetica', variable=self.fo, value='Helvetica', radiobutton2.py

18 Pokračování z předchozího snímku.
Python / Tkinter Pokračování z předchozího snímku. master.title('Radiobutton 2') self.la.pack() self.r1.pack(side='left') self.r2.pack(side='left') self.r1.select() self.ukaz() def ukaz (self): self.newFont = tkFont.Font(family= self.fo.get(), weight='bold') self.la.configure(font=self.newFont) radiobutton2.py

19 def __init__(self, master): self.fr = Frame(master)
Python / Tkinter Vstup class myApp: def __init__(self, master): self.fr = Frame(master) self.en = Entry(self.fr) self.bv = Button(self.fr, text='Vymazat', width=10, command=self.vymaz) self.bz = Button(self.fr, text='Zpracovat', width=10, command=self.zpracuj) self.la = Label(self.fr, foreground='red') #Sem ještě příjdou volání pack entry1.py

20 self.la.configure(text=self.en.get())
Python / Tkinter Pokračování def vymaz(self): self.en.delete(0, END) def zpracuj(self): self.la.configure(text=self.en.get()) entry1.py

21 Plátno s rolovacími lištami
Python / Tkinter Plátno s rolovacími lištami class myApp: def __init__(self, master): self.fr = Frame(master) self.ca = Canvas(self.fr, width=200, height=100, scrollregion=' ') self.sy = Scrollbar(self.fr, orient='vertical', command=self.ca.yview) self.ca.configure(xscrollcommand=self.sx.set, yscrollcommand=self.sy.set) canvas3.py

22 self.ca.grid(row=0, column=0)
Python / Tkinter Pokračování self.fr.pack() self.ca.grid(row=0, column=0) self.sy.grid(row=0, column=1, sticky='ns') self.sx.grid(row=1, column=0, sticky='we') self.li = self.ca.create_line(25, 25, 125, 125, width=2, fill='red') self.ov = self.ca.create_oval(125, 25, 225, 125, fill='blue') canvas3.py

23 def __init__(self, master): self.fr = Frame(master)
Python / Tkinter Listbox s doplněním class myApp: def __init__(self, master): self.fr = Frame(master) self.li = Listbox(self.fr, width=15, height=3) self.la = Label(self.fr, text= 'nic', foreground= 'red') self.bu = Button(self.fr, text= 'Dopln', command=self.dopln) self.li.insert(0, 'Tatra', 'Areo', 'Skoda') self.li.bind('<Double-B1-ButtonRelease>', self.liTakeOver) listbox1.py

24 Pokračování: Doplnění a převzetí výběru.
Python / Tkinter Pokračování: Doplnění a převzetí výběru. def dopln(self): self.li.insert(END, 'Wikov', 'Jawa') self.li.configure(height=self.li.cget('height')+2) self.bu.configure(state='disabled') def liTakeOver(self, event): self.la.configure(text=self.li.get('active')) # Také lze: get(ACTIVE) listbox1.py

25 def __init__(self, master): self.fr = Frame(master)
Python / Tkinter Spinbox s čísly class myApp: def __init__(self, master): self.fr = Frame(master) self.sb = Spinbox(self.fr, fr=2.0, to=3.0, increment=0.1) self.la = Label(self.fr, foreground='red') self.bu = Button(self.fr, text='OK', command=self.buok) self.sb.set(2.5) # Pozor: doplnit do Tkinter! def buok(self): self.la.configure(text=self.sb.get()) spinbox2.py

26 Kaskádová menu s obrázky
Python / Tkinter Kaskádová menu s obrázky class myApp: def __init__(self, master): self.menubar = Menu(master) self.cascmenu = Menu(self.menubar, tearoff=0) self.imgCopy = PhotoImage(file='copy.gif') self.cascmenu.add_command(compound='left', image=self.imgCopy, label='Copy', underline=0, command=self.copy) menu4.py

27 self.filemenu = Menu(self.menubar, tearoff=0)
Python / Tkinter Pokračování self.filemenu = Menu(self.menubar, tearoff=0) self.filemenu.add_cascade(label='Kaskada... ', underline=0, menu=self.cascmenu) self.menubar.add_cascade(label='File', menu=self.filemenu) master.config(menu=self.menubar) menu4.py

28 Ještě několik vazeb na události
Python / Tkinter Ještě několik vazeb na události master.bind('<Button-1>', self.showFileMenu) master.bind('<Key-F1>', self.showMessage) master.bind('<Control-c>', self.appExit) def showFileMenu(self, event): self.filemenu.post(event.x_root, event.y_root) def showMessage(self, event): tkMessageBox.showinfo('Info', 'URO ') def appExit(self, event): self.fr.quit() menu3.py

29 Python / C API Python: Vytvoření nových modulů pro Python.
Zabalení interpreteru Python do aplikace.

30 Python / Tkinter - Co dál? (chcete-li)…
Jazyk uro\texty\python-tutorial.pdf Tkinter uro\texty\an-introdiction-to-tkinter.pdf uro\texty\tkinter.pdf Navštivte


Stáhnout ppt "Stručný průvodce vytvářením GUI v Python / Tk"

Podobné prezentace


Reklamy Google