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

  • Upload
    burke

  • View
    59

  • Download
    0

Embed Size (px)

DESCRIPTION

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č?. - PowerPoint PPT Presentation

Citation preview

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

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

Eduard Sojka

URO, Léto 2003/4

VŠB – Technická univerzita Ostrava

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

2

Python / Tk: stručný průvodce

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í.

Co děláme?

Tvorba GUI

Tvorba s využitím skriptovacích jazyků

Tvorba s využitím obecných jazyků

Tcl/Tk

Python

J ava (Awt|Swing)

C (wxWin, Qt, …)

Proč?

Knih. GUI

Skript. jazyk

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

3

Python / Tk: stručný průvodce

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++).

Co je Python, Tkinter?

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

4

Python / Tk: stručný průvodce

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).

Několik důvodů, proč byste mohli o tvorbě GUI s využitím jazyka Python něco vědět

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

5

Python / Tk: stručný průvodce

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)

Nevýhoda

Vhodný pro vytváření prototypů GUI (rychlé provádění změn).

Typické použití (v kontextu tvorby GUI)

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

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.'

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

7

Python: Základní datové typy a přiřazování

Elementární datové typy a přiřazování

a = 77; b = 3.14c = 1.2 + 3.14jd = e = c / 2.0uro = ’URO 2003/4’nadpis = uro[0:3] + " leto" + uro[3:99]print uro, d.imag, 'ještě něco'

import mathx = math.sqrt(a)*c*cy = math.cos(b)

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

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)

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

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'] = 51print body['C++']del body['OOP']print body.keys()print body.has_key('URO')for x in body.keys():

body[x]=0

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

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 vysledkyvysledky['SOJ11']['C++'] = 51print vysledky['SOJ11']

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

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.'

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

12

Python: Několik dalších detailů

Získání obsahu adresáře.

import globa = glob.glob('*.py')print ab = glob.glob('menu?.py')print b

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

13

Python: Několik dalších detailů

Získání obsahu URL.

import urllib2f = urllib2.urlopen('http://www.vsb.cz')print f.read(100)

for line in urllib2.urlopen('http://www.fei.vsb.cz'):if 'Fax:' in line:

print line

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

14

Python: Několik dalších detailů

Komprese, dekomprese a získání CRC kódu.

import zlibs = 'uro0 uuro00 urro000 uroo0000 uro0 uuro00'print len(s)t = zlib.compress(s)print len(t)print zlib.decompress(t)print zlib.crc32(t)

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

15

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

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

16

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

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

17

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',command=self.ukaz)

radiobutton2.py

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

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

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

19

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

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

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

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

21

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='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

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

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

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

23

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

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

24

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

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

25

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

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

26

Python / Tkinter

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

Kaskádová menu s obrázky

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

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

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

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)

def showFileMenu(self, event):self.filemenu.post(event.x_root, event.y_root)

def showMessage(self, event):tkMessageBox.showinfo('Info', 'URO 2003-4...')

def appExit(self, event):self.fr.quit()

menu3.py

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

29

Python:

Vytvoření nových modulů pro Python.

Zabalení interpreteru Python do aplikace.

Python / C API

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

30

Python / Tkinter - Co dál? (chcete-li)…

Jazyk

http://www.python.org

Navštivte

uro\texty\python-tutorial.pdf

Tkinter

uro\texty\an-introdiction-to-tkinter.pdf

uro\texty\tkinter.pdf