Pe scurt
Programarea vizuală organizează o aplicație în jurul ferestrelor, componentelor și evenimentelor. Un buton „Adaugă” poate citi două câmpuri, valida datele și actualiza un rezultat afișat. Aspectul ferestrei și logica operației trebuie proiectate împreună, dar fiecare are un rol diferit.
În detaliu
Programarea vizuală organizează o aplicație în jurul ferestrelor, componentelor și evenimentelor. În mediul de programare vizuală, formularul este fereastra aplicației. Din paleta de componente se adaugă casete de text, butoane și etichete. Fiecare control are proprietăți (de exemplu textul afișat), metode și evenimente. Un eveniment, cum este „clic pe buton”, pornește execuția unei proceduri; simpla prezență a butonului pe formular nu calculează nimic. Aspectul ferestrei și logica operației se proiectează împreună, dar au roluri diferite: de aceea funcția de calcul poate fi scrisă separat și testată fără fereastră.
Exemplul 1 — fluxul unui calculator de sume. Utilizatorul scrie „3” și „5”; evenimentul butonului citește aceste texte; conversia produce întregii 3 și 5; logica obține 8; proprietatea de text a etichetei rezultatului devine „8”. Dacă al doilea câmp conține „x”, conversia eșuează, iar interfața trebuie să afișeze o explicație, nu un rezultat înșelător. Logica se poate scrie ca o funcție care primește textele și întoarce textul etichetei:
def aduna_texte(t1, t2):
try:
return str(int(t1) + int(t2))
except ValueError:
return "Eroare: date invalide"
print(aduna_texte("3", "5"), aduna_texte("3", "x"), aduna_texte("", "5"))
Se afișează 8 Eroare: date invalide Eroare: date invalide. Caseta goală este tratată ca date invalide, pentru că int("") ridică ValueError. Funcția poate fi verificată pe aceste trei cazuri fără a deschide fereastra, iar handlerul butonului doar o apelează cu caseta1.get() și caseta2.get().
Exemplul 2 — mai multe evenimente. Aplicația are două butoane, „Adună” și „Șterge”, fiecare cu propria procedură:
import tkinter as tk
fereastra = tk.Tk()
c1 = tk.Entry(fereastra)
c1.grid(row=0, column=0)
c2 = tk.Entry(fereastra)
c2.grid(row=0, column=1)
rezultat = tk.Label(fereastra, text="")
rezultat.grid(row=1, column=0, columnspan=2)
def aduna():
rezultat.config(text=aduna_texte(c1.get(), c2.get()))
def sterge():
c1.delete(0, tk.END)
c2.delete(0, tk.END)
rezultat.config(text="")
tk.Button(fereastra, text="Adună", command=aduna).grid(row=2, column=0)
tk.Button(fereastra, text="Șterge", command=sterge).grid(row=2, column=1)
fereastra.mainloop()
După scrierea valorilor 3 și 5 și un clic pe „Adună”, eticheta arată „8”. Un clic pe „Șterge” golește ambele casete și eticheta. Starea ferestrei depinde de succesiunea evenimentelor: același buton „Adună” produce „8” după introducerea lui 3 și 5, dar „Eroare: date invalide” imediat după „Șterge”, când casetele sunt goale. Testarea aplicației verifică fluxul de interacțiune, nu doar citirea codului.
Exemplul 3 — validare în doi pași. Un formular cere vârsta unei persoane. Logica verifică întâi că textul este un număr întreg, apoi că valoarea are sens, și abia apoi decide categoria:
def categorie(text):
try:
v = int(text)
except ValueError:
return "Eroare: nu este număr"
if v < 0 or v > 120:
return "Eroare: în afara intervalului"
return "Minor" if v < 18 else "Major"
print(categorie("17"), categorie("18"), categorie("-3"), categorie("abc"))
Se afișează Minor Major Eroare: în afara intervalului Eroare: nu este număr. Valorile de la marginea domeniilor se testează explicit: 17 și 18 despart categoriile, 0 și 120 sunt acceptate, iar 121 este respins. Ordinea verificărilor contează, pentru că o comparație cu 18 făcută înainte de conversie ar compara un text cu un număr. Un text cu spații la capete, ca " 17 ", este acceptat de int, dar o valoare zecimală precum "17.5" ridică ValueError și primește mesajul de eroare; dacă aplicația cere numere reale, conversia se face cu float, iar mesajele de eroare spun clar ce format se așteaptă.
Etapele proiectării. O aplicație simplă se construiește în ordine: se desenează formularul și se alege fiecare control; se stabilește ce eveniment pornește fiecare operație; se scrie logica într-o funcție independentă de fereastră; se leagă evenimentul de funcție; se testează cazurile obișnuite, cazurile-limită și datele greșite.
Greșeli frecvente
- Greșit: un element vizual conține automat și algoritmul de calcul.Corect: evenimentul trebuie legat de logica potrivită.
- Greșit: orice text din câmp poate fi adunat numeric.Corect: datele se validează și se convertesc.
- Greșit: testarea aplicației se face doar prin citirea codului.Corect: se verifică și fluxul de interacțiune.
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:
- OMECI 5099/2009, anexa 5, Informatică, p. 3–4, 8, clasa XII; rocnee.eu
Documente consultate
- 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 OMECI 5099/2009, anexa 5, Informatică XII; informatica.isj-db.ro
