See artikkel ootab keeletoimetamist. (Märts 2020) |
See artikkel vajab toimetamist. (Mai 2022) |
Moodul tkinter (koos alammooduliga tkinter.tkk) on graafiliste kasutajaliideste loomise vahend, mis kuulub programmeerimiskeele Pythoni standardvarustusse. Tkinter moodulid põhinevad laialt levinud teegil nimega Tk, mida kasutatakse ka teistes programmeerimiskeeltes.[1]
Tkinteri töötas välja Fredrik Lundh ja Scriptics.[2] Nimi Tkinter tuleneb väljendist Tk interface.
Tkinter on vaikimisi kaasatud Pythoni Linuxi, Microsoft Windowsi ja Mac OS X-i installipakettidesse.
Lisaks tkinterile on olemas ka teisi alternatiivselt populaarseid graafilise kasutajaliidese teeke, nagu näiteks wxPython, PyQt (PySide), Pygame, Pyglet, ja PyGTK.
Sarnaselt teiste tänapäevaste Tk köidetega rakendatakse Tkinter Pythoni pakendina (Pyhton wrapper) Pythoni tõlki (Python intrepeter) manustatud Tcl-tõlgi ümber. Tkinteri kutsungid tõlgitakse Tcl käskudeks, mis saadetakse sissehitatud Tcl tõlki. See muudab võimalikuks Pyhtoni ja Tcl-i kasutamise samas rakenduses.
Python 2.7 ja Python 3.1 sisaldavad ka Tk 8.5-st pärit stiliseeritud TK ("themed Tk" / "ttk") funktsionaalsust. [3] Selle funktsionaalsusega saab Tk vidinatele vähese vaevaga rakendada rakendust ümbritseva operatsioonisüsteemile omaseid stiilielemente.
Tkinteri osad saab jagada järgmistesse klassidesse:
Aken (Window)
Sellel terminil on kontekstist sõltuvalt erinevaid tähendusi, kuid üldiselt viitab see ristkülikukujulisele alale kasutaja ekraanil, mida saab kasutada programmidega suhtlemiseks. Eraldiseisev aken (Top Level Window), on aken, mis eksisteerib ekraanil teistest akendest iseseisvalt. Sellel on standardsed operatsioonisüsteemile stiilikohased juhtnupud ja raam. Seda saab mööda töölauda ringi liigutada ja enamasti saab ka selle suurust muuta.
Raam (Frame)
Raam on peamine vidinate organiseerimismeetod tkinteris. Raami all mõeldakse vidinat, mis hõlmab ristkülikukujulist ala. Raam võib omakorda sisaldada teisi vidinaid.
Sisuliselt raam üksinda on ainult n.ö tühi aken, millesse ei ole paigutatud ühtegi vidinat.
Vidin (Widget)
Vidinateks nimetatakse üldist terminit nn ehitusplokkide kohta, millest rakenduse graafiline kasutajaliides koosneb. Tkinter toetab 18 põhilist vidinat.[4]
Kuuluvussuhe (Child and parent relationship) – hetkest, kui vidin luuakse, määratakse automaatselt talle ka kohe kuuluvussuhe. Näiteks kui lisada tekstikast raami sisse, siis on raam tekstikasti ülem ja tekstikast raami alam.
Tkinteri moodulis on lisaks vidinatele eraldi abiklass, mida nimetatakse mikseriteks. Mikser on klass, mis on loodud kasutamiseks teiste klassidega koos, kasutades mitmikkuuluvussuhet. Mikerklass ei ole mõeldud iseseisvaks kasutamiseks.
Tavaline paigutus (Place)
Ruudustikmeetod (Grid)
Pakkimismeetod (Pack)
Vidinatega tegelemisel on enamasti neli faasi:
2) Seadistamine (Configure)
Allpool on näiteks toodud üks Python 3 Tkinteri programm, milles on kasutatud kolme vidinat (label, button ja entry). Programmi eesmärk on küsida kasutajalt sisendina tema nimi ja siis kasutajat selle nimega tervitada. [1] (Python 2 puhul peab mooduli importimisel sõna "tkinter" puhul kasutama esisuurtähte – "Tkinter".)
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
# See funktsioon käivitatakse nupule klõpsamisel
def tervita():
tervitus = 'Tere ' + nimi.get()
messagebox.showinfo(message=tervitus)
# Loome akna
raam = Tk()
raam.title("Tervitaja")
# Loome tekstikasti jaoks sildi
silt = ttk.Label(raam, text="Nimi")
# Paigutame sildi ruudustiku ülemisse vasakusse lahtrisse (column ja row).
# Soovime, et sildi ümber jääks igas suunas 5 pikslit vaba ruumi (padx ja pady).
silt.place(x=5, y=5)
# Loome tekstikasti
nimi = ttk.Entry(raam)
nimi.place(x=70, y=5, width=150)
# loome nupu
nupp = ttk.Button(raam, text="Tervita!", command=tervita)
nupp.place(x=70, y=40, width=150)
# Kuvame akna ekraanile.
raam.mainloop()
import
-lause teeb kättesaadavaks tkinter
-i põhivahendid, teine import
teeb kättesaadavaks platvormi stiiliga kasutajaliidese vidinad.tervita
on mõeldud käivitamiseks nupu klõpsamise korral. Funktsiooni kehas küsitakse allpool defineeritud tekstikasti sisu (nimi.get()
), moodustatakse selle põhjal tervitusega sõne ning näidatakse seda kasutajale väikses lisaaknas. (Selles funktsioonis oleme kasutanud ühte globaalset muutujat – nimi
pole ei funktsiooni parameeter ega lokaalne muutuja, vaid funktsioonist väljaspool defineeritud muutuja.)Tk()
loob akna, millele järgmisel real määratakse pealkiri ja ülejärgmisel real mõõtmed (pikslites).Järgnevalt luuakse 3 kasutajaliidese komponenti e vidinat (ingl widget).
ttk.Label
loob ühe sildi (s.o vidina teksti näitamiseks). Funktsiooni esimene argument näitab, et kasutaja soovib seda silti kasutada eespool loodud aknas. Kasutades nimelist argumenti text
, annab kasutaja sellele sildile ka soovitud teksti. Käsk silt.place(...)
paigutas loodud sildi soovitud koordinaatidele (ühikuteks on pikslid, punkt (0,0) paikneb akna sisuosa ülemises vasakus nurgas ning koordinaadid kasvavad paremale/alla liikudes).ttk.Entry
). Selle paigutamisel näidatakse ära ka soovitud laius.ttk.Button
) loomisel määrati argumendiga command
ära, mida tuleb teha nupu klõpsamise korral. Argumendi väärtuseks on ainult funktsiooni nimi, mitte funktsiooni väljakutse (see oleks olnud koos tühjade sulgudega). Põhjus on selles, et eesmärk ei ole funktsiooni käivitada mitte nupu loomise ajal, vaid siis, kui nuppu klõpsatakse.raam.mainloop()
,mis kuvab loodud akna ekraanile ja jääb ootama kasutaja tegevusi.[1]{{cite web}}
: CS1 hooldus: url-olek (link)