81 Tkinter ja suurem näide värvidega
Nüüdseks oleme tutvunud erinevate Tkinteri komponentide ja funktsionaalsustega.
Küll aga pole me veel kokku puutunud kujundusega. Hea viis Tkinteriga loodud graafiliste kasutajaliideste kujundamiseks on luua stiile ja omistada neid komponentidele.
Selleks tuleks meil teha stiil:
style = ttk.Style()
Näiteks teeme kõik tausta helesiniseks.
style.configure('TFrame', background='light blue')
Eristiilide loomisel tuleks lisada ka vastav stiili nimi. Näiteks teeme nupule eristiili, kus paneme kirjasuuruseks 12 ja kirjastiiliks Helvetica ning tausta heleroheliseks koos punase kirjaga:
style.configure('.', font=('Helvetica', 12))
style.configure("Mine.TButton", foreground="red", background="light green")
Samuti tuleks need stiilid lisada vastavatele komponentidele:
nupp = ttk.Button(sisuraam, text="Arvuta!", style="Mine.TButton", command=teisenda).grid(column=3, row=3, sticky=W)
Kuidas näiteks tekstisiltide taustad valgeks teha?
Komponentide stiilide muutmiseks leiab ttk komponentide nimekirja siit: https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/ttk-style-layer.html
Värviline programm näeks välja selline:
from tkinter import * # tkinteri põhivahendid from tkinter import ttk # platvormi ühise stiili saamiseks def teisenda(*args): try: a = float(meetrid.get()) kilomeetrid.set(a / 1000) meetrid.set("") except ValueError: kilomeetrid.set("Ei saanud teisendada. Sisesta arv!") meetrid.set("") raam = Tk() raam.title("Meetrite teisendamine") style = ttk.Style() style.configure('TFrame', background='light blue') style.configure('TLabel', background='white') sisuraam = ttk.Frame(raam, padding="3 3 12 12") sisuraam.grid(column=0, row=0, sticky=(N, W, E, S)) raam.columnconfigure(0, weight=1) raam.rowconfigure(0, weight=1) meetrid = StringVar() kilomeetrid = StringVar() meetrite_tekstikast = ttk.Entry(sisuraam, width=7, textvariable=meetrid) meetrite_tekstikast.grid(column=2, row=1, sticky=(W, E)) ttk.Label(sisuraam, textvariable=kilomeetrid).grid(column=2, row=2, sticky=(W, E)) style.configure('.', font=('Helvetica', 12)) style.configure("Mine.TButton", foreground="red", background="light green") nupp = ttk.Button(sisuraam, text="Arvuta!", style="Mine.TButton", command=teisenda).grid(column=3, row=3, sticky=W) ttk.Label(sisuraam, text="meetrit").grid(column=3, row=1, sticky=W) ttk.Label(sisuraam, text="on võrdne").grid(column=1, row=2, sticky=E) ttk.Label(sisuraam, text="kilomeetriga.").grid(column=3, row=2, sticky=W) for child in sisuraam.winfo_children(): child.grid_configure(padx=5, pady=5) meetrite_tekstikast.focus() raam.bind('<Return>', teisenda) raam.mainloop()