Rozdział 16 · Tworzenie fajnych aplikacji z Tkinter

Etykiety, guziki i ich rozmieszczenie

Pierwsze interaktywne widgety – i jak Tkinter umieszcza je w oknie.

Widżet — wizualny obiekt interfejsu

Widżet (widget) — dowolny element interfejsu widzialnego/interaktywnego: etykieta, przycisk, pole wejściowe. Podobnie jak w rozdziale 14, każdy widżet jest instancją klasy z własnymi atrybutami i metodami. Wytwórnia (Label) pokazuje tekst, przycisk (Button) reaguje na kliknięcie.

metki_knopki.py
import tkinter as tk

root = tk.Tk()

label = tk.Label(root, text=„Cześć, Tkinter!”)
label.pack()

def na_knopku_nazhali():
    print(„Przycisk został naciśnięty!”)

button = tk.Button(root, text=„Click me”, command=na_knopku_nazhali)
button.pack()

root.mainloop()
Okno oznaczone "Hej Tkinter!" oraz przycisk "Click me"
Wynik wykonania powyższego kodu — prawdziwe okno Tkinter. Przykład wyglądu w środowisku kursu. Na Twoim OS czcionki, rozmiary i motyw mogą się nieco różnić.
Tworzenie widżetu nie jest tym samym, co jego wyświetlanie
tk.Button(root, ...) tworzy tylko obiekt przycisku. Nie pojawi się on w oknie, dopóki go nie umieścisz Menedżer Geometrii.pack() tutaj, albo .grid() (Rozdział 16.7), lub .place() (Rozdział 16.15).

command jest funkcją, a nie wywołaniem funkcji

Parametr command powiązanie przycisku z funkcją jest ważne aby przekazać samą funkcję, bez nawiasów: command=na_knopku_nazhali, a nie command=na_knopku_nazhali().

Częsty błąd: nawiasy w command
na_knopku_nazhali — to sama funkcja jako obiekt (rozdział 13). na_knopku_nazhali() jest wywołanie funkcje obecnie. command=na_knopku_nazhali() zadzwoni natychmiast, raz, podczas tworzenia przycisku — i połączy przycisk z tym, co funkcja powrócił (zazwyczaj None), a nie z samą funkcją. Kliknięcia przycisku po tym niczego nie wywołają.
Przycisk normalny obok niedostępnego (przycisk disabled)
state=„disabled”
state="disabled"
Możesz tymczasowo uniemożliwić dostęp przycisku — button.state(["disabled"]) z ttk-widgets lub state="disabled" przy utworzeniu. Przydatne, gdy dane nie są jeszcze gotowe do działania (Rozdział 16.23 - walidacja).

Szczegóły pack

.pack() najprostszy sposób na umieszczenie widżetu w oknie. Domyślnie widżety są ułożone pod sobą od góry do dołu, ale istnieją przydatne parametry:

pack_podrobno.py
label.pack(side="left", padx=10, pady=10)
# side: top (domyślnie), bottom, left, right
# padx/pady: zewnętrzny margines poziomy/pionowy

Więcej o fill/expand i grupowanie przez Frame — w sekcjach 16.13–16.14.

Praktyka: Label, Button i pack()
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →