Tartalomjegyzék

< Python

Python Tk GUI

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:

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

-filetypes filePatternList

-initialdir directory

-initialfile filename

-message string

-multiple boolean

-mustexist boolean

-parent ablak

-title címszöveg

Kurzor

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:

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

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

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

Külső linkek