Pe scurt
O interfață grafică permite utilizatorului să lucreze prin ferestre, etichete, câmpuri și butoane. Într-un calculator de sume, utilizatorul introduce două valori și apasă „Calculează”; programul citește câmpurile, verifică datele și afișează suma. Elementele vizuale nu înlocuiesc logica de calcul, ci oferă o cale de a o folosi.
În Python, un buton Tkinter poate apela o funcție atunci când elevul face clic; dacă funcția mărește un contor de la 0 la 1, eticheta trebuie actualizată la „1”.
În detaliu
O interfață grafică este condusă de evenimente: programul așteaptă acțiunea utilizatorului (clic, apăsare de tastă), apoi execută funcția asociată controlului respectiv. Elementele uzuale sunt fereastra, care grupează controalele, caseta care primește textul, butonul care declanșează evenimentul și eticheta care arată rezultatul sau eroarea. Funcția asociată evenimentului (handlerul) are pași separați: citește datele, le validează, calculează, actualizează interfața. Această ordine împiedică efectuarea calculelor cu date invalide. Conținutul unei casete este text, iar conversia numerică este explicită. Lecția „Tkinter” prezintă implementarea în Python, iar lecția „Programare vizuală” dezvoltă organizarea aplicației cu evenimente.
Exemplul 1 — logica separată de interfață. Pentru un convertor de temperatură, calculul se scrie ca funcție obișnuită, care primește textul din casetă și întoarce textul pentru etichetă. Astfel poate fi testat fără fereastră:
def converteste(text):
try:
c = float(text)
except ValueError:
return "Valoare invalidă"
return f"{9 * c / 5 + 32:g} °F"
print(converteste("20"), converteste("abc"), converteste("-40"))
Se afișează 68 °F Valoare invalidă -40 °F. Pentru 20, formula dă . Pentru abc, conversia float ridică ValueError, iar funcția întoarce un mesaj, nu un număr. Valoarea este singurul punct în care scările Celsius și Fahrenheit coincid, deci este un test bun al formulei.
Exemplul 2 — legarea funcției de evenimentul butonului. Fereastra are o casetă, un buton „Convertește” și o etichetă. Handlerul citește caseta, apelează funcția de calcul și schimbă eticheta:
import tkinter as tk
fereastra = tk.Tk()
caseta = tk.Entry(fereastra)
caseta.grid(row=0, column=0)
rezultat = tk.Label(fereastra, text="")
rezultat.grid(row=1, column=0)
def la_clic():
rezultat.config(text=converteste(caseta.get()))
tk.Button(fereastra, text="Convertește", command=la_clic).grid(row=2, column=0)
fereastra.mainloop()
Dacă utilizatorul scrie 20 și apasă butonul, eticheta devine „68 °F”. Dacă apoi scrie abc și apasă din nou, eticheta devine „Valoare invalidă”: handlerul rescrie eticheta la fiecare clic, deci vechiul rezultat nu rămâne drept răspuns nou. Simpla apăsare a butonului nu produce niciun calcul dacă funcția nu este asociată prin command=la_clic, iar eticheta nu se schimbă singură când se modifică caseta.
Exemplul 3 — contor de clicuri. Un buton Tkinter poate apela o funcție care mărește un contor de la 0 la 1, iar eticheta trebuie actualizată la „1”: valoarea variabilei și textul etichetei sunt lucruri diferite, deci după contor += 1 urmează eticheta.config(text=str(contor)).
import tkinter as tk
fereastra = tk.Tk()
contor = 0
eticheta = tk.Label(fereastra, text="0")
eticheta.pack()
def la_clic():
global contor
contor += 1
eticheta.config(text=str(contor))
tk.Button(fereastra, text="Adaugă", command=la_clic).pack()
fereastra.mainloop()
După trei clicuri, contor ia pe rând valorile 1, 2, 3, iar eticheta arată „1”, „2”, „3”. Declarația global contor este necesară: fără ea, contor += 1 ar căuta o variabilă locală neinițializată și ar apărea eroarea UnboundLocalError. Apelul fereastra.mainloop() pornește bucla de evenimente: programul rămâne în ea și așteaptă clicuri până când fereastra este închisă.
Exemplul 4 — calculator de sume cu validare. Funcția primește textele din două casete și întoarce textul pentru etichetă:
def aduna(t1, t2):
try:
return f"{float(t1) + float(t2):g}"
except ValueError:
return "Date invalide"
print(aduna("3", "4"), aduna("2.5", "1.5"), aduna("3", ""))
Se afișează 7 4 Date invalide. Suma 2,5 + 1,5 este afișată ca 4, nu 4.0, datorită formatului :g. A treia apelare dă mesajul de eroare, deoarece un șir gol nu poate fi convertit în număr, iar aplicația nu se oprește. Handlerul butonului doar apelează aduna(prima.get(), a_doua.get()) și pune rezultatul în etichetă.
Așezarea controalelor. Metoda grid(row=..., column=...) așază controlul într-o grilă de rânduri și coloane, iar pack() îl adaugă simplu sub cele existente. În același container nu se amestecă grid și pack, deoarece Tk semnalează o eroare.
Greșeli frecvente
- Greșit: un câmp cu text „3” este automat numărul întreg 3.Corect: este necesară conversia.
- Greșit: apăsarea unui buton produce singură un calcul.Corect: trebuie asociat un comportament.
- Greșit: o interfață grafică nu are nevoie de validarea intrărilor.Corect: datele introduse pot fi invalide.
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
- OMECI 5099/2009, anexa 5, Informatică, p. 3–4, 8, clasa XII; rocnee.eu
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
- Programa școlară de informatică, clasa a XII-a (OMECI 5099/2009, anexa 5), CNCE, modulul opțional de programare vizuală, p. 3–4 și 8; 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, Informatică IX intensiv; rocnee.eu
