80 Tkinteri vidinad
Eelnevates näidisprogrammides oleme kasutanud erinevaid Tkinteri vidinaid nagu tekstisildid, tekstisisestuskastid ja nupud. Järgnevalt vaatame ükshaaval üle erinevad Tkinteri vidinaid näidete abil.
Tekstisilt
Tekstisildi loomiseks kasutasime käsklust:
tekstisilt = ttk.Label(raam, text="Tekstisildil olev tekst.")
Selleks, et kuvada tekstisildil muutuja väärtust, on võimalus luua StringVar tüüpi muutuja ja kasutada seda tekstisildil:
tekst = StringVar()
tekstisilt = ttk.Label(raam, textvariable = tekst)
Sellisel juhul tuleb tekstisildil olevat silti muuta muutes muutuja väärtust:
tekst.set("Tekstisildil olev tekst.")
Pildid tahvlile
Pildifaile kasutades on võimalik tahvlile lisada pilte. Lubatud on .gif, .png, .pgm ja .ppm formaadis pildifailid. Järgmise näite kasutamiseks salvesta programmiga samasse kausta järgmised failid: kuusk.gif, lill.gif.
Näiteprogramm. Pildid tahvlil
from tkinter import * # tkinteri põhivahendid from tkinter import ttk # platvormi ühise stiili saamiseks raam = Tk() raam.title("Tahvel") tahvel = Canvas(raam, width=400, height=400, background="white") tahvel.grid() # pildi kuvamisel on vaja kõigepealt laadida pilt ja panna see siis tahvlile kuusk = PhotoImage(file="kuusk.gif") img = tahvel.create_image(250, 80, image=kuusk) # activeimage määrab pildi, mida näidatakse, kui hiirekursor on pildi kohal # anchor näitab, mille järgi pilt paigutatakse (antud juhul ülemise-vasaku nurga järgi) lill = PhotoImage(file="lill.gif") img = tahvel.create_image(50, 200, image=kuusk, activeimage=lill, anchor=NW) raam.mainloop()
Moodul PIL ja pildi suuruse muutmine
Tuntumate formaatide jaoks nagu JPEG/JPG ja PNG on vaja kasutada mooduli ImageTk abi ja pildiklasse PIL (Photo Imaging Library) paketist. Need paketid tuleks siis eelnevalt lisada (Thonnys valik Tools-> Manage Packages…) . PIL toetab üle 30 erineva pildiformaadi ja muudab need programmi jaoks pildiobjektideks.
Vaatame näidet, kuidas kasutada
from tkinter import * from tkinter import ttk from PIL import ImageTk, Image #impordidakse PIL moodul root = Tk() canvas = Canvas(root, width = 300, height = 300) canvas.pack() pilt = Image.open("pall.png").resize((100, 100)) # pildi pall.png lisamine ja suuruse muutmine 100 piksli kõrguseks pildiobjekt = ImageTk.PhotoImage(pilt) # pildiobjekti loomine tahvlile asetamiseks # Järgmisel real on lisaks pildi lisamisele kasutatud parameetreid 20, 20 ja anchor, mida pole vaja kasutada. # 20 ja 20 võimaldavad pildilt välja jätta 20 pikslit serva. Anchor näitab, et ära lõigatakse ülemine (N-north) ja vasak (W-west) serv. canvas.create_image(20, 20, anchor=NW, image=pildiobjekt) # pildiobjekti lisamine tahvlile lõigates servad root.mainloop()
Sageli läheb vaja pildi muutmist ka funktsioonis. Selleks võib luua muutuja pilt globaalsena: global pilt = … ja seda kasutada funktsioonis.
Nupp
Esimeses näiteprogrammis juba kasutasime nuppu. Nupu puhul on oluline määrata, kuhu see paigutatakse (raam), mis teksti sellel kuvatakse (“Tervita!”) ja mis funktsioon nupuvajutusel käivitatakse (tervita):
nupp = ttk.Button(raam, text='Tervita!" command=tervita)
Küll aga on nupul veel huvitavaid funktsioone:
nupp.invoke() # aktiveerib nupu selliselt, et saab vajutada ka enter-klahvi kasutades.
nupp.state(['disabled']) # muudab nupu mitteaktiivseks
nupp.state(['!disabled']) # eemaldab nupult mitteaktiivsuse
nupp.instate(['disabled']) # tagastab tõese väärtuse (True) kui nupp on mitteaktiivne
nupp.instate(['!disabled']) # tagastab väära väärtuse (False) kui pole mitteaktiivne
nupp.instate(['!disabled'], käsklus) # käivitab käskluse, kui nupp pole mitteaktiivne
Märkeruut
Vahel on vaja, et kasutaja programmis märgiks linnukesega sobivad valikud. Selleks saab kasutada märkeruutu (ingl checkbox).
Näiteprogramm märkeruudu märke lugemisest:
from tkinter import * raam = Tk() def valitud(): print("Meessoost: " + str(muutuja1.get()) + ", naissoost: " + str(muutuja2.get())) muutuja1 = IntVar() Checkbutton(raam, text="mees", variable=muutuja1).grid(row=1, sticky=W) muutuja2 = IntVar() Checkbutton(raam, text="naine", variable=muutuja2).grid(row=2, sticky=W) Button(raam, text="Näita tulemus", command=valitud).grid(row=4, sticky=W, pady=4) mainloop()
Raadionupp
Kui märkeruut võimaldas valida mitu valikut, siis raadionupp (ingl radio button) on sarnaste võimalustega, kuid võimaldab valida ühe valiku.
Näiteprogramm raadiunupu kasutamisest:
from tkinter import * from tkinter import ttk def valitud(): valik = "Valisid valiku: " + str(muutuja.get()) silt.config(text = valik) raam = Tk() muutuja = IntVar() R1 = Radiobutton(raam, text="Valik 1", variable=muutuja, value=1, command=valitud) R1.pack( anchor = W ) R2 = Radiobutton(raam, text="Valik 2", variable=muutuja, value=2, command=valitud) R2.pack( anchor = W ) R3 = Radiobutton(raam, text="Valik 3", variable=muutuja, value=3, command=valitud) R3.pack(anchor = W) silt = Label(raam) silt.pack() raam.mainloop()
Tekstisisestuskast
Tekstisisestuskasti kasutasime ka esimeses näiteprogrammis. Tasub vaid meelde tuletada, et tekstikastist teksti lugemiseks tasuks luua muutuja:
kasutajanimi = StringVar()
Ja seda saaks siis hiljem kasutada tekstikastist näiteks kasutajanime küsimisel:
nimi = ttk.Entry(raam, textvariable=kasutajanimi)
Tekstikasti sisestatud väärtuse saab funktsioonis kätte tekstikastist käsuga nimi.get().
Samuti saab tekstikasti tühjaks teha käsuga:
name.delete(0,'end')
Või vajadusel asendada mõne muu tekstiga:
name.insert(0, 'Sisesta siia kasutajanimi: ')
Kombokast
Kombokast (ingl combo box) annab võimaluse valida üks valik etteantud loetelust. Mugav on seda kasutada näiteks siis, kui on soov, et kasutaja teeks ühe valiku järjendi elementidest.
Kombokasti valikut saab näiteks kasutada selliselt:
muutuja = StringVar()
kombokast = ttk.Combobox(raam, textvariable=muutuja)
riigid['values'] = ('USA', 'Kanada', 'Austraalia')