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

 

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Tarkvaraarendus. 2. trükk on loodud Eno Tõnisson, Tauno Palts, Kaarel Tõnisson, Heidi Meier, Merilin Säde, ja Säde Mai Krusberg jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut