Didaxis
lecție · Informatică

Tkinter

Clasele și metodele de bază pentru interfețe Python.

Se face în:
Clasa a IX-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 2 · rezumatul lecției

Pe scurt

Tkinter este interfața Python către biblioteca grafică Tk. O aplicație creează o fereastră, adaugă elemente vizuale și pornește o buclă de evenimente. Un buton poate apela o funcție când este apăsat; argumentul command primește funcția, fără paranteze de apel la configurare.

Desen la lecția „Tkinter”
2în detaliustratul 2 din 2 · pentru clasă și Bacalaureat

În detaliu

Tkinter este interfața Python către biblioteca grafică Tk. O aplicație creează o fereastră (Tk()), adaugă widgeturi (elemente vizuale) și pornește bucla de evenimente prin mainloop(). Widgeturile uzuale sunt Label (text afișat), Entry (casetă de intrare), Button (buton). Amplasarea cu grid folosește linii și coloane. Un buton apelează o funcție când este apăsat: argumentul command primește funcția însăși, fără paranteze de apel la configurare. Valoarea dintr-un Entry se citește cu .get() și este întotdeauna text, deci conversia numerică este explicită. Starea care se păstrează între clicuri (de exemplu un contor) se memorează într-o variabilă globală sau într-un obiect, iar elementul vizual se actualizează explicit, prin config.

Exemplul 1 — un contor. Programul păstrează un contor și îl mărește la fiecare clic, afișând și textul din casetă:

import tkinter as tk
fereastra = tk.Tk()
contor = 0
intrare = tk.Entry(fereastra)
intrare.grid(row=0, column=0)
eticheta = tk.Label(fereastra, text="0")
eticheta.grid(row=1, column=0)
def creste():
    global contor
    contor += 1
    eticheta.config(text=str(contor) + " " + intrare.get())
tk.Button(fereastra, text="Crește", command=creste).grid(row=2, column=0)
fereastra.mainloop()

Dacă în casetă este „Ana”, după două clicuri eticheta arată „2 Ana”. Funcția este transmisă ca command=creste, fără paranteze. Modificarea variabilei contor nu schimbă singură eticheta: textul ei se actualizează doar prin config.

Exemplul 2 — adunarea a două numere cu validare. Cele două casete conțin text. Funcția asociată butonului citește textele, le convertește și afișează suma sau un mesaj de eroare:

import tkinter as tk
fereastra = tk.Tk()
a = tk.Entry(fereastra)
a.grid(row=0, column=0)
b = tk.Entry(fereastra)
b.grid(row=0, column=1)
rezultat = tk.Label(fereastra, text="")
rezultat.grid(row=1, column=0, columnspan=2)
def aduna():
    try:
        rezultat.config(text=str(int(a.get()) + int(b.get())))
    except ValueError:
        rezultat.config(text="Date invalide")
tk.Button(fereastra, text="Adună", command=aduna).grid(row=2, column=0, columnspan=2)
fereastra.mainloop()

Pentru „3” și „5”, eticheta arată „8”. Pentru „3” și „x”, conversia int("x") ridică ValueError, iar eticheta arată „Date invalide”, nu un rezultat vechi. Dacă am aduna direct a.get() + b.get(), textele ar fi concatenate: „3” și „5” ar da „35”, nu 8.

Exemplul 3 — greșeala command=creste(). Prin paranteze, funcția se apelează imediat, la crearea butonului, iar butonul primește valoarea întoarsă de funcție, adică None:

import tkinter as tk
fereastra = tk.Tk()
contor = 0
def creste():
    global contor
    contor += 1
buton = tk.Button(fereastra, text="Crește", command=creste())
print(contor)
buton.invoke()
print(contor)

Se afișează 1, apoi 1. Contorul a crescut o dată, înainte de orice clic, iar clicurile ulterioare nu mai fac nimic, deoarece butonul nu are nicio funcție asociată. Forma corectă este command=creste.

Exemplul 4 — mai multe butoane, o singură funcție. Un contor se mărește cu 1 sau cu 5, după butonul apăsat. Funcția primește pasul ca parametru, iar apelul se amână prin lambda:

import tkinter as tk
fereastra = tk.Tk()
contor = 0
eticheta = tk.Label(fereastra, text="0")
eticheta.grid(row=0, column=0, columnspan=2)
def adauga(pas):
    global contor
    contor += pas
    eticheta.config(text=str(contor))
tk.Button(fereastra, text="+1", command=lambda: adauga(1)).grid(row=1, column=0)
tk.Button(fereastra, text="+5", command=lambda: adauga(5)).grid(row=1, column=1)
fereastra.mainloop()

Expresia lambda: adauga(1) este o funcție fără parametri care apelează adauga(1) abia la apăsarea butonului. Dacă ar fi scris command=adauga(1), apelul ar avea loc imediat, la crearea butonului. După trei clicuri pe „+1” și două pe „+5”, contorul este , iar eticheta arată „13”.

Amplasarea. Un widget apare în fereastră numai după ce i s-a aplicat o metodă de amplasare, grid sau pack. În același container nu se amestecă cele două metode: dacă Label-ul folosește grid și un Button din aceeași fereastră folosește pack, Tkinter semnalează eroare. Caseta Entry se golește cu intrare.delete(0, tk.END) și primește un text nou cu intrare.insert(0, "text"). Dacă o aplicație are un buton „Reset”, funcția lui trebuie să refacă toate elementele: să golească fiecare Entry, să readucă eticheta la textul inițial și să pună variabila contor pe 0; altfel fereastra arată o stare, iar variabila ține minte alta. După „Reset”, un clic pe „+5” trebuie să afișeze 5, nu 18.

Greșeli frecvente

  • Greșit: command=creste() amână apelul până la apăsare.
    Corect: apelează funcția imediat; transmite command=creste.
  • Greșit: mainloop() calculează suma intrărilor.
    Corect: gestionează evenimentele ferestrei.
  • Greșit: modificarea unui șir local schimbă automat eticheta.
    Corect: actualizează elementul vizual, de exemplu prin config.
în contul tăuPremium

Testează-te pe această lecție

Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.

Înainte și după

Surse și referințe

Redactare proprie, conform programei:

  • OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
  • OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633; rocnee.eu
  • OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro

Documente consultate

  • Programele școlare noi de informatică pentru clasele X–XII (OMEC 4370/2026, MO 591 bis/20.07.2026), CNCE, p. 155–156; rocnee.eu
  • Python Software Foundation, Python Library Reference, capitolul „Graphical User Interfaces with Tk”, docs.python.org/3/library/tk.html

Desene: Redactare proprie (desen original), conform OMEC 4370/2026, anexa 8, Informatică IX intensiv; rocnee.eu

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.