A GUI elemeket és azok funkcionalitását a tkinter modulban definiáljuk. A következő kód egy alap felhasználói felület létrehozásának lépéseit mutatja be.
from tkinter import * ablak=Tk() # add widgets here ablak.title('MálnaPc') ablak.geometry("300x200+10+20") ablak.mainloop()
Először is, importáljuk a tkinter modult. Az importálás után állítsuk be az alkalmazás objektumot a Tk() függvény meghívásával. Ez létrehoz egy legfelső szintű ablakot (root), a példánkban „ablak” néven, amely egy keretet tartalmaz címsorral, egy vezérlődobozt a minimalizáló és bezáró gombokkal, valamint egy ügyfélterületet más widgetek tárolására. A geometry() metódus az alábbiak szerint határozza meg a keret bal felső sarkának szélességét, magasságát és koordinátáit (minden érték pixelben van megadva):
# ablak mérete és pozíciója pixelben ablak.geometry("widthxheight+XPOS+YPOS")
Az alkalmazásobjektum ezután a mainloop() metódus meghívásával belép egy eseményfigyelő ciklusba. Az alkalmazás most folyamatosan várja a benne lévő elemeken generált eseményeket. Az esemény lehet egy szövegmezőbe beírt szöveg, egy legördülő menüből, vagy rádiógombból történt kiválasztás, az egér egyszeri/dupla kattintásos műveletei stb. Az alkalmazás funkcionalitása magában foglalja a megfelelő visszahívási függvények végrehajtását egy adott típusú eseményre válaszul. Az eseménykezelést később fogjuk tárgyalni ebben a leírásban. Az eseményhurok akkor és úgy fejeződik be, amikor a címsoron lévő bezárás gombra kattintunk. A fenti kód egy alap ablakot hoz létre, egyelőre vezérlők (widgetek) nélkül.
Minden tkinter widget elem a Widget osztályból öröklődik. Adjuk hozzá a leggyakrabban használt vezérlőket jelenleg még üres ablakunkhoz.
A Button (gomb) widget
A gomb a Button osztály segítségével hozható létre. A Button osztály konstruktorának szüksége van a főablak nevére, és az opciókra való hivatkozásra.
Formátum: Button (window, attributes)
A gomb testreszabásához a következő fontos tulajdonságokat állíthatjuk be:
text: a gomb felirata
bg: háttérszín
fg: előtérszín
font: betűtípus neve és mérete
image: a szöveg helyett megjelenítendő kép
command: a gombra kattintáskor meghívandó függvény
Egy egyszerű mintaprogram:
from tkinter import * ablak=Tk() btn=Button(ablak, text="Íme a Button widget", fg='red') btn.place(x=70, y=100) ablak.title('MálnaPc') ablak.geometry("300x200+10+10") ablak.mainloop()
A Label (címke) widget
Címke hozható létre a felhasználói felületen Pythonban a Label osztály segítségével. A Label konstruktornak szüksége van a felső szintű ablakobjektumra és az opciók paramétereire. Az opciós paraméterek hasonlóak a Button objektumhoz.
Az alábbiakban egy címkét adunk hozzá az ablakhoz.
from tkinter import * window=Tk() lbl=Label(window, text="This is Label widget", fg='red', font=("Helvetica", 16)) lbl.place(x=60, y=50) window.title('MálnaPc') window.geometry("300x200+10+10") window.mainloop()
Az Entry (beviteli mező) widget
Ez a widget egy egysoros szövegdobozt jelenít meg a felhasználói bevitel elfogadásához. Többsoros szövegbevitelhez használja a Text widgetet. A már említett tulajdonságokon kívül az Entry osztály konstruktora a következőket fogadja el:
bd : a szövegdoboz keretének mérete; alapértelmezett értéke 2 pixel.
show : a szövegdoboz jelszómezővé alakításához állítsa a show tulajdonságot “*”-ra.
A következő kódrészlet adja hozzá a szövegmezőt az ablakodhoz:
# szövegmező txtfld=Entry(window,text="This is Entry Widget", bg='black', fg='white', bd=5)
A következő példa egy ablakot hoz létre egy gombbal, címkével és beviteli mezővel:
from tkinter import * window=Tk() btn=Button(window, text="This is Button widget", fg='blue') btn.place(x=80, y=100) lbl=Label(window, text="This is Label widget", fg='red', font=("Helvetica", 16)) lbl.place(x=60, y=50) txtfld=Entry(window, text="This is Entry Widget", bd=5) txtfld.place(x=80, y=150) window.title('MálnaPc') window.geometry("300x200+10+10") window.mainloop()
Kijelölő widgetek
Rádiógomb: Ez a widget egy BE/KI állapotú váltógombot jelenít meg. Lehet, hogy egynél több gomb van, de csak az egyik lesz bekapcsolva egy adott időpontban.
Kiválasztó gomb: Ez is egy váltógomb. A felirat előtt egy téglalap alakú jelölőnégyzet jelenik meg. A BE állapotot a négyzetben lévő pipa jelenik meg, amely eltűnik, amikor a KI gombra kattint.
Combobox: Ez az osztály a tkinterpackage ttk moduljában van definiálva. Feltölti a legördülő adatokat egy gyűjtemény adattípusából, például egy tuple-ból vagy egy listából értékparaméterként.
Listbox: A Comboboxtól eltérően ez a widget a karakterláncelemek teljes gyűjteményét megjeleníti. A felhasználó kijelölhet egy vagy több elemet.
A következő példa a kijelölési widgeteket tartalmazó ablakot mutatja be: Radiobutton, Checkbutton, Listbox és Combobox:
from tkinter import * from tkinter.ttk import Combobox window=Tk() var = StringVar() var.set("one") data=("one", "two", "three", "four") cb=Combobox(window, values=data, width=15) cb.place(x=10, y=150) lb=Listbox(window, height=5, selectmode='multiple') for num in data: lb.insert(END,num) lb.place(x=200, y=150) v0=IntVar() v0.set(1) r1=Radiobutton(window, text="Python 2", variable=v0,value=1) r2=Radiobutton(window, text="Python 3", variable=v0,value=2) r1.place(x=100,y=50) r2.place(x=180, y=50) v1 = IntVar() v2 = IntVar() C1 = Checkbutton(window, text = "Cricket", variable = v1) C2 = Checkbutton(window, text = "Tennis", variable = v2) C1.place(x=105, y=100) C2.place(x=185, y=100) window.title('MálnaPc') window.geometry("400x300+10+10") window.mainloop()
A cikk folytatása: https://www.malnasuli.hu/python/egy-raspberry-specifikus-grafikus-alkalmazas/
A előző rész: https://www.malnasuli.hu/python/keszits-hazilag-grafikus-vezerlofeluletet-tkinter-1-resz/