1 / 30

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

Eduard Sojka URO, Léto 2003/4 VŠB – Technická univerzita Ostrava. Stručný průvodce vytvářením GUI v Python / Tk. Python / Tk: stručný průvodce. Skript. jazyk. Knih. GUI. Co děláme?. Proč?.

burke
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Python / Tk: stručný průvodce Skript. jazyk Knih. GUI 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í.

  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. classmyApp: 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 = 1.2 + 3.14j d = e = c / 2.0 uro = ’URO 2003/4’ nadpis = uro[0:3] + " leto" + uro[3:99] printuro, 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]) ifvolba.count('C++') == 0: volba.append('C++') volba.sort() printvolba.pop(3) print'volba:', volba; printlen(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 printbody['C++'] delbody['OOP'] printbody.keys() printbody.has_key('URO') forxinbody.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 pin predmety]) vysledky = dict([(s, vysledek) forsin studenti]) printvysledky vysledky['SOJ11']['C++'] = 51 printvysledky['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') printa b = glob.glob('menu?.py') printb

  13. Python: Několik dalších detailů Získání obsahu URL. import urllib2 f = urllib2.urlopen('http://www.vsb.cz') printf.read(100) forlinein urllib2.urlopen('http://www.fei.vsb.cz'): if'Fax:'inline: printline

  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. Python / Tkinter Popiska from Tkinter import * classmyApp: 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. Python / Tkinter Tlačítko s obrázkem classmyApp: 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. Python / Tkinter Radio buttons classmyApp: 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', command=self.ukaz) radiobutton2.py

  18. 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. Python / Tkinter Vstup classmyApp: 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. 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. Python / Tkinter Plátno s rolovacími lištami classmyApp: def __init__(self, master): self.fr = Frame(master) self.ca = Canvas(self.fr, width=200, height=100, scrollregion='0 0 400 250') 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. 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. Python / Tkinter Listbox s doplněním classmyApp: 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. Python / Tkinter Pokračování: Doplnění a převzetí výběru. defdopln(self): self.li.insert(END, 'Wikov', 'Jawa') self.li.configure(height=self.li.cget('height')+2) self.bu.configure(state='disabled') defliTakeOver(self, event): self.la.configure(text=self.li.get('active')) # Také lze: get(ACTIVE) listbox1.py

  25. Python / Tkinter Spinbox s čísly classmyApp: 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! defbuok(self): self.la.configure(text=self.sb.get()) spinbox2.py

  26. Python / Tkinter Kaskádová menu s obrázky classmyApp: 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. 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. 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) defshowFileMenu(self, event): self.filemenu.post(event.x_root, event.y_root) defshowMessage(self, event): tkMessageBox.showinfo('Info', 'URO 2003-4...') defappExit(self, event): self.fr.quit() menu3.py

  29. Python: Python / C API 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 http://www.python.org

More Related