Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:python:tkinter:hagyomanyosan

< 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:

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

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.

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

Külső linkek

oktatas/programozas/python/tkinter/hagyomanyosan.txt · Utolsó módosítás: 2023/08/21 21:13 szerkesztette: admin