2016/11/24 01:35
1/14
Python Tk GUI
< Python
Python Tk GUI Szerző: Sallai András Copyright © Sallai András, 2011 Licenc: GNU Free Documentation License 1.3 Web: http://szit.hu
Bevezetés A Tkinter egy ’Tk Toolkit’-en alapuló class-könyvtár, amit John Ousterhout fejlesztett a Tcl nyelvéhez, amit a Sun Microsystems terjeszt.
Helló Világ main.py # coding: utf-8 from Tkinter import * ablak = Tk() gomb = Button(ablak, text="Kilép", command=ablak.quit) gomb.pack() ablak.mainloop()
Fontbeállítások A következő programban fontbeállításokat is végzünk: # coding: utf-8 from Tkinter import * ablak = Tk() ablak.option_add("*font","lucida 14 bold italic") gomb = Button(ablak, text="Kilép", command=ablak.quit) gomb.pack() ablak.mainloop()
SzitWiki - http://szit.hu/
Last update: 2014/12/06 01:52
oktatas:programozás:python:tk_gui http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:python:tk_gui
Nyomógomb main.py #coding: utf-8 from Tkinter import * class App: def __init__(self, master): frame = Frame(master) frame.pack() self.button = Button(frame, text="Kilépés", fg="red", command=frame.quit) self.button.pack(side=LEFT) self.hi_there = Button(frame, text="Szia", command=self.say_hi) self.hi_there.pack(side=LEFT) def say_hi(self): print "Lenyomott gomb" ablak = Tk() app = App(ablak) ablak.mainloop()
Nyomógomb megint #coding: utf-8 from Tkinter import * import tkMessageBox class App: def __init__(self, master): frame = Frame(master) frame.pack() self.kilepes_gomb = Button(frame, text="Kilépés", fg="red", command=frame.quit) self.kilepes_gomb.pack(side=LEFT) self.udv_gomb = Button(frame, text="Szia", command=self.udvozlet) self.udv_gomb.pack(side=LEFT) def udvozlet(self): tkMessageBox.showinfo("Címsor", "Üdvözlet") return http://szit.hu/
Printed on 2016/11/24 01:35
2016/11/24 01:35
3/14
Python Tk GUI
ablak = Tk() app = App(ablak) ablak.mainloop()
Üzenetablak A tkMessageBox modult üzenetdobozok megjelenítésére használjuk programokban. Ez a modul több függvényt tartalmaz az üzenetek megjelenítésének variálásához. Ezek a függvények a következők: showinfo, showwarning, showerror, askquestion, askokcancel, askyesno, és askretryignore Szintaxis: Itt egyszerű szintaxist találsz a használatára: tkMessageBox.FuggvenyNev(cim, uzenet [, opciok]) Paraméterek: FuggvenyNev: A kívánt üzenetformához tartozó függvénynév cim: Az üzenetablak címsorában látszik uzenet: A megjelenített üzenet opciok: Alternatív lehetőségek megadása az alapértelmezett megjelenés helyett. showinfo() showwarning() showerror() askquestion() askokcancel() askyesno() askretrycancel() Példa: import Tkinter import tkMessageBox top = Tkinter.Tk() def hello(): tkMessageBox.showinfo("Üdv ablak", "Üdv") gomb1 = Tkinter.Button(top, text = "Mond: Üdv", command = hello) gomb1.pack()
SzitWiki - http://szit.hu/
Last update: 2014/12/06 01:52
oktatas:programozás:python:tk_gui http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:python:tk_gui
top.mainloop() Választott gomb visszaadása: #coding: utf-8 import tkMessageBox if tkMessageBox.askyesno("Másik", "Valami") == 1: print "Akarja" else: print "Nem akarja"
input() Elérhető kapcsolók defaultextension, filetypes, initialdir, askopenfiles(mode='r', fájl megnyitása askopenfile(mode='r', **options) initialfile, multiple, **options) message, parent, title defaultextension, egy fájlnév filetypes, initialdir, kinyerése askopenfilename(**options) askopenfilenames(**options) initialfile, multiple, megnyitáshoz message, parent, title defaultextension, filetypes, initialdir, asksaveasfile(mode='w', fájl mentése n/a initialfile, multiple, **kapcsolók) message, parent, title defaultextension, egy fájlnév filetypes, initialdir, kinyerése asksaveasfilename(**kapcsolók) n/a initialfile, multiple, mentéshez message, parent, title initialdir, parent, könyvtárválasztás askdirectory(**) n/a title, mustexist Funkció
Egy fájl
Több fájl
Kapcsolók -defaultextension kiterjesztés A fájlhoz egy kiterjesztést fűz hozzá, ha nem volt kiterjesztése. Az alapértelmezetten ez üres karaktersorozat. Macintosh rendszeren ez a kapcsoló nem működik. -filetypes filePatternList Az elérhető fájltípusok egy listadobozban. Ha a felhasználó kiválaszt egy fájltípust, akkor csak az látszik. http://szit.hu/
Printed on 2016/11/24 01:35
2016/11/24 01:35
5/14
Python Tk GUI
-initialdir directory Amikor a párbeszédablak megjelenik, melyik könyvtár legyen az alapértelmezett könyvtár. Ha nincs megadva, akkor az aktuális munkakönyvtár lesz a kezdőkönyvtár. -initialfile filename Alapértelmezett fájlnév induláskor -message string A párbeszédablak egy üzenete. -multiple boolean Engedélyezi több fájl kiválasztását. Macintoshon csak telepített szolgáltatás mellett érhető el. -mustexist boolean Ha be van állítva, akkor csak létező könyvtárakat tudunk megnyitni. -parent ablak A párbeszédablak szülőablakát állíthatjuk be. -title címszöveg A címsor szövege
Kurzor „arrow” „circle” „clock” „cross” „dotbox” „exchange” „fleur” „heart” „heart” „man” „mouse” „pirate” „plus” „shuttle” „sizing” „spider” „spraycan” „star” „target” „tcross” „trek” SzitWiki - http://szit.hu/
Last update: 2014/12/06 01:52
oktatas:programozás:python:tk_gui http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:python:tk_gui
„watch” Példa a kurzor használatára: #!/usr/bin/python #coding: utf-8 from Tkinter import * import Tkinter gyoker = Tkinter.Tk() gomb1 = Tkinter.Button(gyoker, text="Kör", relief=RAISED,\ cursor="circle") gomb2 = Tkinter.Button(gyoker, text="Plusz", relief=RAISED,\ cursor="plus") gomb1.pack() gomb2.pack() gyoker.mainloop() http://docs.huihoo.com/tkinter/tkinter-reference-a-gui-for-python/cursors.html
Font Font objektum fontok létrehozásához: Készíthetsz egy font objektumot, amelyet a tkFont modul importálása után érhetsz el. Használd a Font konstruktort: import tkFont font = tkFont.Font (kapcsoló, ... ) Az kapcsolók listája: family: A fontcsalád neve karakteresorozatként. size: A font magassága, egész számként képpontokban. weight: „bold” félkövér, „normal” általános stílusért. slant: „italic” dőlt, „roman” nem dőlt. underline: 1 aláhúzás, 0 normál. overstrike: 1 áthúzott szöveg, 0 normál. Linux alatt a használható fontok listája: fc-list Példák: self.font = tkFont.Font( family="Bitstream Vera Sans", size=48, http://szit.hu/
Printed on 2016/11/24 01:35
2016/11/24 01:35
7/14
Python Tk GUI
weight=tkFont.BOLD, slant=tkFont.ITALIC ) helv36 = tkFont.Font(family="Helvetica",size=36,weight="bold") Komplett példa: #!/usr/bin/python #coding: utf-8 from Tkinter import * import tkFont def result(e): print ent.get()
gyoker = Tk() hevl36 = tkFont.Font(family="Helvetica", size=30, weight="bold") ent = Entry(gyoker, width=25) ent.insert(0,"Valami szöveg") ent.config(bg="#ffeeff", fg="#ff0000", bd=25, cursor="clock", font=hevl36) ent.bind('
', result) ent.pack() gyoker.mainloop()
Események Esemény Leírás <Button-1> Egy egérgomb lenyomásakor keletkezik (bal, jobb vagy középső). Az Enter billentyű megnyomása
Text Több soros szövegdoboz #!/usr/bin/python #coding: utf-8 from Tkinter import * import tkFont gyoker = Tk() font1 = tkFont.Font(family="Helvetica", size=30, weight="bold") text = Text(gyoker, width=30, height=4) #text.insert(0,"Valami szöveg") SzitWiki - http://szit.hu/
Last update: 2014/12/06 01:52
oktatas:programozás:python:tk_gui http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:python:tk_gui
text.config(bg="#ffeeff", fg="#ff0000", font=font1 )
Menü Egyszerű menü #!/usr/bin/python #coding: utf-8 from Tkinter import * gyoker = Tk() def hello(): print "Helló" menusav = Menu(gyoker) menusav.add_command(label="Helló", command=hello) menusav.add_command(label="Kilépés", command=gyoker.quit) gyoker.config(menu=menusav) gyoker.mainloop()
Legördülő menü #!/usr/bin/python #coding: utf-8 from Tkinter import * gyoker = Tk() def hello(): print "Helló" menusav = Menu(gyoker) #Legördülő menü fajlmenu = Menu(menusav, tearoff=0) fajlmenu.add_command(label="Megnyitás", command=hello) fajlmenu.add_command(label="Mentés", command=hello) fajlmenu.add_separator() fajlmenu.add_command(label="Kilépés", command=gyoker.quit) menusav.add_cascade(label="Fájl", menu=fajlmenu) editmenu = Menu(menusav, tearoff=0) http://szit.hu/
Printed on 2016/11/24 01:35
2016/11/24 01:35
9/14
editmenu.add_command(label="Kivágás", command=hello) editmenu.add_command(label="Másolás", command=hello) editmenu.add_command(label="Beillesztés", command=hello) menusav.add_cascade(label="Szerkesztés", menu=editmenu) helpmenu = Menu(menusav, tearoff=0) helpmenu.add_command(label="Névjegy", command=hello) menusav.add_cascade(label="Segítség", menu=helpmenu) gyoker.config(menu=menusav) gyoker.mainloop()
Popup menü #!/usr/bin/python #coding: utf-8 from Tkinter import * gyoker = Tk() def hello(): print "Helló" menu = Menu(gyoker, tearoff=0) menu.add_command(label="Visszavonás", command=hello) menu.add_command(label="Ismétlés", command=hello) frame = Frame(gyoker, width=512, height=512) frame.pack() def popup(event): menu.post(event.x_root, event.y_root) frame.bind("<Button-3>", popup) gyoker.mainloop()
Menü változtatása futási időben #!/usr/bin/python #coding: utf-8 from Tkinter import * counter = 0
SzitWiki - http://szit.hu/
Python Tk GUI
Last update: 2014/12/06 01:52
oktatas:programozás:python:tk_gui http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:python:tk_gui
def update(): global counter counter = counter + 1 menu.entryconfig(0, label=str(counter)) gyoker = Tk() menusav = Menu(gyoker) menu = Menu(menusav, tearoff=0, postcommand=update) menu.add_command(label=str(counter)) menu.add_command(label="Kilépés", command=gyoker.quit) menusav.add_cascade(label="Teszt", menu=menu) gyoker.config(menu=menusav) gyoker.mainloop()
Geometria kezelése Minden Tkinter widgets rendelkezik geometriát kezelő metódusokkal, amelynek célja a szülő widgeten való elhelyezés beállítása. A Tkinter a következő geometriakezelőkkel van felszerelve: pack, grid és a place. A pack() metódus - A komponenseket blokkokba rendezi. A grid() metódus - A komponenseket táblázatba helyezi el. A place() metódus - Az adott pozícióban helyezzük el a komponenseket.
Automatikus elhelyezés egymás alatt #!/usr/bin/python #coding: utf-8 from Tkinter import * gyoker = Tk() gomb1 = Button(gyoker, text="Első") gomb2 = Button(gyoker, text="Második") gomb1.pack() gomb2.pack() gyoker.mainloop()
Táblázatos elhelyezés #!/usr/bin/python #coding: utf-8 http://szit.hu/
Printed on 2016/11/24 01:35
2016/11/24 01:35
11/14
from Tkinter import * gyoker = Tk() gomb1 = Button(gyoker, text="Első") gomb2 = Button(gyoker, text="Második") gomb1.grid(row=0, column=1) gomb2.grid(row=0, column=2)
gyoker.mainloop()
Elhelyezés adott pozícióban 1 #!/usr/bin/python #coding: utf-8 from Tkinter import * gyoker = Tk()
keret = Frame(gyoker, width=800,height=600) keret.pack() gomb1 = Button(gyoker, text="Első") gomb2 = Button(gyoker, text="Második") gomb1.place(x=200, y=200) gomb2.place(x=100, y=200) gyoker.mainloop()
Elhelyezés adott pozícióban 2 #!/usr/bin/python #coding: utf-8 from Tkinter import * import Tkinter gyoker = Tkinter.Tk() keret = Frame(gyoker, width=800,height=600) keret.pack() gomb1 = Tkinter.Button(gyoker, text="Kör") gomb2 = Tkinter.Button(gyoker, text="Plusz") SzitWiki - http://szit.hu/
Python Tk GUI
Last update: 2014/12/06 01:52
oktatas:programozás:python:tk_gui http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:python:tk_gui
gomb1.place(x=200, y=200) gomb2.place(x=100, y=200) gyoker.mainloop()
Komplexebb példa from Tkinter import * class GridDemo( Frame ): def __init__( self ): Frame.__init__( self ) self.master.title( "Grid Demo" ) self.master.rowconfigure( 0, weight = 1 ) self.master.columnconfigure( 0, weight = 1 ) self.grid( sticky = W+E+N+S ) self.text1 = Text( self, width = 15, height = 5 ) self.text1.grid( rowspan = 3, sticky = W+E+N+S ) self.text1.insert( INSERT, "Text1" ) self.button1 = Button( self, text = "Button 1", width = 25 ) self.button1.grid( row = 0, column = 1, columnspan = 2, sticky = W+E+N+S ) self.button2 = Button( self, text = "Button 2" ) self.button2.grid( row = 1, column = 1, sticky = W+E+N+S ) self.button3 = Button( self, text = "Button 3" ) self.button3.grid( row = 1, column = 2, sticky = W+E+N+S ) self.button4 = Button( self, text = "Button 4" ) self.button4.grid( row = 2, column = 1, columnspan = 2, sticky = W+E+N+S ) self.entry = Entry( self ) self.entry.grid( row = 3, columnspan = 2, sticky = W+E+N+S ) self.entry.insert( INSERT, "Entry" ) self.text2 = Text( self, width = 2, height = 2 ) self.text2.grid( row = 3, column = 2, sticky = W+E+N+S ) self.text2.insert( INSERT, "Text2" ) self.rowconfigure( 1, weight = 1 ) self.columnconfigure( 1, weight = 1 ) def main(): GridDemo().mainloop()
http://szit.hu/
Printed on 2016/11/24 01:35
2016/11/24 01:35
13/14
Python Tk GUI
if __name__ == "__main__": main()
Egy egyszerű szövegszerkesztő # -*- coding: iso-8859-15 -*# egy egyszerá Tkinter alapú szövegszerkesztő from Tkinter import * from tkFileDialog import * import tkMessageBox class App(object): def __init__(self, master): frame = Frame(master) frame.pack() self.text = Text() self.text.pack() menu = Menu(master) root.config(menu=menu) # file menü filemenu = Menu(menu, tearoff=0) filemenu.add_command(label="Új") filemenu.add_command(label="Megnyitás", command=self.file_open) filemenu.add_command(label="Mentés", command=self.file_save) filemenu.add_separator() filemenu.add_command(label="Kilépés", command=self.do_exit) # help menü helpmenu = Menu(menu, tearoff=0) helpmenu.add_command(label="Névjegy", command=self.do_about) menu.add_cascade(label="Fájl", menu=filemenu) menu.add_cascade(label="Segítség", menu=helpmenu) def file_open(self): """Fájl megnyitása""" # Alapértelmezett könyvtár (esetleg c:\vhol) initial_dir = "/home" # Fájlmaszk megadása mask = \ [("Szöveges és Python fájlok","*.txt *.py *.pyw"), ("HTML fájlok","*.htm"), ("Minden fájl","*")] fin = askopenfile(initialdir=initial_dir, filetypes=mask, mode='r') SzitWiki - http://szit.hu/
Last update: 2014/12/06 01:52
oktatas:programozás:python:tk_gui http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:python:tk_gui
text = fin.read() if text != None: self.text.delete(0.0, END) self.text.insert(END,text)
def file_save(self): """Fájl mentése""" # Alapértelmezett kiterjesztés, ha nincs akkor automatikusan megadja fout = asksaveasfile(mode='w', defaultextension=".txt") text2save = str(self.text.get(0.0,END)) fout.write(text2save) fout.close()
def do_exit(self): root.destroy() def do_about(self): tkMessageBox.showinfo("Névjegy", "Egyszerű szövegszerkesztő\nSallai András")
root = Tk() root.title("Egyszerű szövegszerkesztő") app = App(root) root.mainloop()
Külső linkek http://docs.huihoo.com/tkinter/tkinter-reference-a-gui-for-python/index.html http://python.free-h.net/spip.php?article26 http://effbot.org/tkinterbook/tkinter-index.htm http://www.pythonware.com/library/ http://www.tutorialspoint.com/python/tk_messagebox.htm
From: http://szit.hu/ - SzitWiki Permanent link: http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:python:tk_gui Last update: 2014/12/06 01:52
http://szit.hu/
Printed on 2016/11/24 01:35