Tartalomjegyzék
Python Tk GUI
- Szerző: Sallai András
- Copyright © 2011, Sallai András
- Szerkesztve: 2011, 2020
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Helló Világ
- hello.py
import tkinter as tk ablak = tk.Tk() ablak.mainloop()
Gomb
- gomb.py
import tkinter as tk ablak = tk.Tk() gomb = tk.Button(ablak, text="Kilép") gomb.pack() ablak.mainloop()
Gomb eseménnyel
- gomb.py
import tkinter as tk ablak = tk.Tk() gomb = tk.Button(ablak, text="Kilép", command=ablak.quit) gomb.pack() ablak.mainloop()
Importálás külön-külön
- kulon.py
from tkinter import Tk from tkinter import Button 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:
import tkinter as tk ablak = tk.Tk() ablak.option_add("*font","lucida 14 bold italic") gomb = tk.Button(ablak, text="Kilép", command=ablak.quit) gomb.pack() ablak.mainloop()
Nyomógombok
- main.py
import tkinter as tk class App: def __init__(self, master): frame = tk.Frame(master) frame.pack() self.button = tk.Button(frame, text="Kilépés", fg="red", command=frame.quit) self.button.pack(side=tk.LEFT) self.hi_there = tk.Button(frame, text="Szia", command=self.say_hi) self.hi_there.pack(side=tk.LEFT) def say_hi(self): print("Lenyomott gomb") ablak = tk.Tk() app = App(ablak) ablak.mainloop()
Nyomógomb megint
import tkinter as tk from tkinter import messagebox class App: def __init__(self, master): frame = tk.Frame(master) frame.pack() self.kilepes_gomb = tk.Button(frame, text="Kilépés", fg="red", command=frame.quit) self.kilepes_gomb.pack(side=tk.LEFT) self.udv_gomb = tk.Button(frame, text="Szia", command=self.udvozlet) self.udv_gomb.pack(side=tk.LEFT) def udvozlet(self): messagebox.showinfo("Címsor", "Üdvözlet") return ablak = tk.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 from tkinter import messagebox top = tkinter.Tk() def hello(): messagebox.showinfo("Üdv ablak", "Üdv") gomb1 = tkinter.Button(top, text = "Mond: Üdv", command = hello) gomb1.pack() top.mainloop()
Választott gomb visszaadása:
from tkinter import messagebox if messagebox.askyesno("Másik", "Valami") == 1: print("Akarja") else: print("Nem akarja") input()
Funkció | Egy fájl | Több fájl | Elérhető kapcsolók |
---|---|---|---|
fájl megnyitása | askopenfile(mode='r', **options) | askopenfiles(mode='r', **options) | defaultextension, filetypes, initialdir, initialfile, multiple, message, parent, title |
egy fájlnév kinyerése megnyitáshoz | askopenfilename(**options) | askopenfilenames(**options) | defaultextension, filetypes, initialdir, initialfile, multiple, message, parent, title |
fájl mentése | asksaveasfile(mode='w', **kapcsolók) | n/a | defaultextension, filetypes, initialdir, initialfile, multiple, message, parent, title |
egy fájlnév kinyerése mentéshez | asksaveasfilename(**kapcsolók) | n/a | defaultextension, filetypes, initialdir, initialfile, multiple, message, parent, title |
könyvtárválasztás | askdirectory(**) | n/a | initialdir, parent, title, mustexist |
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.
-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”
- „watch”
Példa a kurzor használatára:
- kurzor.py
from tkinter import Tk from tkinter import Button from tkinter import RAISED gyoker = Tk() gomb1 = Button(gyoker, text="Kör", relief=RAISED,\ cursor="circle") gomb2 = Button(gyoker, text="Plusz", relief=RAISED,\ cursor="plus") gomb1.pack() gomb2.pack() gyoker.mainloop()
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 tkinter.font as font sajatfont = tkinter.font.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 = font.Font( family="Bitstream Vera Sans", size=48, weight=font.BOLD, slant=font.ITALIC )
helv36 = font.Font(family="Helvetica",size=36,weight="bold")
Komplett példa:
- fontpelda.py
from tkinter import Tk from tkinter import Entry from tkinter.font import Font def result(e): print(ent.get()) gyoker = Tk() hevl36 = 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('<Return>', 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ő). |
<Return> | Az Enter billentyű megnyomása |
Text
Több soros szövegdoboz
- text.py
from tkinter import Tk from tkinter import INSERT from tkinter import Text from tkinter.font import Font gyoker = Tk() font1 = Font(family="Helvetica", size=30, weight="bold") text = Text(gyoker, width=30, height=4) text.insert(INSERT, "Valami") text.pack() text.config(bg="#ffeeff", fg="#ff0000", font=font1 ) gyoker.mainloop()
Menü
Egyszerű menü
- menu.py
from tkinter import Tk from tkinter import Menu 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ü
- legordulo.py
from tkinter import Tk from tkinter import Menu 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) 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ü
- popup.py
from tkinter import Tk from tkinter import Menu from tkinter import Frame 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
- valtozomenu.py
from tkinter import Tk from tkinter import Menu counter = 0 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
- automatikus.py
from tkinter import Tk from tkinter import Button gyoker = Tk() gomb1 = Button(gyoker, text="Első") gomb2 = Button(gyoker, text="Második") gomb1.pack() gomb2.pack() gyoker.mainloop()
Táblázatos elhelyezés
- tablazatos.py
from tkinter import Tk from tkinter import Button 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
- pozicio.py
from tkinter import Tk from tkinter import Frame from tkinter import Button 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
- pozicio2.py
from tkinter import Tk from tkinter import Frame from tkinter import Button gyoker = Tk() keret = Frame(gyoker, width=800,height=600) keret.pack() gomb1 = Button(gyoker, text="Kör") gomb2 = Button(gyoker, text="Plusz") gomb1.place(x=200, y=200) gomb2.place(x=100, y=200) gyoker.mainloop()
Komplexebb példa
- komplex.py
from tkinter import Frame from tkinter import Button from tkinter import Text from tkinter import Entry from tkinter import INSERT from tkinter import W from tkinter import E from tkinter import N from tkinter import S 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() if __name__ == "__main__": main()
Egy egyszerű szövegszerkesztő
- szovegszerkeszto.py
from tkinter import Tk from tkinter import Frame from tkinter import Menu from tkinter import Text from tkinter import END from tkinter import filedialog from tkinter import messagebox 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 = filedialog.askopenfile(initialdir=initial_dir, filetypes=mask, mode='r') 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 = filedialog.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): messagebox.showinfo("Névjegy", "Egyszerű szövegszerkesztő\nSallai András") root = Tk() root.title("Egyszerű szövegszerkesztő") app = App(root) root.mainloop()