Python clasa a 9-a · Manual Python
Laborator Python
LECȚIE · CAPITOLUL 5

5.4. Aplicații grafice

Calculatoare, formulare și mici aplicații interactive

INTRODU
→
ACȚIONEAZĂ
→
PRELUCREAZĂ
→
AFIȘEAZĂ
01
OBIECTIVE

La finalul lecției vei putea...

01

Combini componente

Construiești o aplicație completă din widgeturile studiate.

02

Prelucrezi date

Citești și prelucrezi date introduse prin Entry.

03

Asociezi acțiuni

Legezi butoane de funcții care calculează sau verifică.

04

Tratezi situații speciale

Folosești MessageBox, tratezi date invalide și testezi aplicația.

✓
Checkpoint

Care este fluxul de bază al unei aplicații interactive?

02
EXPLICAȚIE

Construim aplicații interactive

În lecțiile 5.1–5.3 am construit treptat fereastra, widgeturile, organizarea și citirea valorilor din Entry. Acum le combinăm într-o aplicație care rezolvă o problemă reală.

Fluxul unei aplicații interactive

1

Introdu

Utilizatorul completează câmpurile.

2

Acționează

Apasă un buton.

3

Prelucrează

Funcția citește și calculează.

4

Afișează

Rezultatul sau mesajul apare în interfață.

Validarea datelor

Un utilizator poate lăsa un câmp gol sau poate introduce text acolo unde programul așteaptă un număr. De aceea, folosim try/except pentru conversiile numerice.

Calculator cu două numere

Calculatorul primește două numere și permite adunarea, scăderea, înmulțirea și împărțirea. Pentru împărțire tratăm separat cazul în care al doilea număr este zero.

✓
Checkpoint

De ce trebuie tratat separat cazul b == 0?

03
EXEMPLU INTUITIV

De la date introduse la rezultat

O aplicație interactivă urmează un flux simplu: utilizatorul introduce date, apasă un buton, programul citește și prelucrează datele, apoi comunică rezultatul.

Testează un calculator mic

Alege o operație.

Testează un caz invalid

Înlocuiește b cu 0 și încearcă împărțirea. Apoi scrie abc în a.

Aplicația trebuie să trateze aceste situații fără să se oprească.

04
PYTHON

Calculatorul și validarea datelor

def calculeaza(op):
    try:
        a = float(camp_a.get())
        b = float(camp_b.get())
    except ValueError:
        messagebox.showwarning("Date invalide", "Introdu numere.")
        return

    if op == "+":
        rezultat = a + b
    elif op == "-":
        rezultat = a - b
    elif op == "*":
        rezultat = a * b
    else:
        if b == 0:
            messagebox.showwarning("Eroare", "Împărțirea la zero nu este permisă.")
            return
        rezultat = a / b

    rezultat_label.config(text="Rezultat: " + str(rezultat))

Funcția citește valorile cu get(), încearcă conversia la float, verifică împărțirea la zero și apoi modifică textul unui Label prin config().

Exersează conversia

Exersează config()

Rezultat: —

05
ALGORITM / PSEUDOCOD

Fluxul unei aplicații

ALGORITM Calculator
    citește valorile din Entry
    încearcă transformarea lor în numere
    dacă datele sunt invalide atunci
        afișează avertisment
    altfel
        dacă operația este împărțire și al doilea număr este 0 atunci
            afișează avertisment
        altfel
            efectuează operația
            afișează rezultatul
        sfârșit dacă
    sfârșit dacă
SFÂRȘIT ALGORITM

Reconstituie fluxul

Apasă etapele în ordinea corectă.

06
ATENȚIE!

Erori și cazuri-limită

get() returnează text

Pentru calcule numerice trebuie să convertim valoarea, de exemplu cu float().

Tratează ValueError

Conversia unui text precum „abc” la număr poate produce această eroare.

Împărțirea la zero

Verificarea lui b == 0 trebuie făcută înainte de împărțire.

Separă calculul

O funcție pentru calcul face codul mai ușor de înțeles și reutilizat.

07
EXEMPLU REZOLVAT

Calculator cu două numere

Problemă

Construiește un calculator cu două numere care permite adunarea, scăderea, înmulțirea și împărțirea.

Ideea de rezolvare

Funcția calculeaza(op) citește cele două Entry, convertește valorile și execută operația cerută. Pentru date invalide sau împărțire la zero se afișează un avertisment.

Analiză

Intrare: două valori și operația aleasă. Ieșire: rezultatul sau un mesaj. Cazuri speciale: date invalide și divizor zero.

Algoritm/pseudocod

citește a și b
încearcă transformarea în numere
dacă transformarea eșuează, afișează avertisment
dacă op = împărțire și b = 0, afișează avertisment
altfel calculează
afișează rezultatul

Python

def calculeaza(op):
    try:
        a = float(camp_a.get())
        b = float(camp_b.get())
    except ValueError:
        messagebox.showwarning("Date invalide", "Introdu numere.")
        return
    if op == "+":
        rezultat = a + b
    elif op == "-":
        rezultat = a - b
    elif op == "*":
        rezultat = a * b
    else:
        if b == 0:
            messagebox.showwarning("Eroare", "Împărțirea la zero nu este permisă.")
            return
        rezultat = a / b
    rezultat_label.config(text="Rezultat: " + str(rezultat))

Urmărirea variabilelor

MomentabopRezultat
Introducere82+—
get() + float()8.02.0+—
Calcul8.02.0+10.0
config()8.02.0+Label = „Rezultat: 10.0”

Testare

TestDateRezultat așteptat
Caz normal8, 2, +10.0
Caz-limită0, 5, *0.0
Caz particular5, 5, /1.0
Date invalide8, abc, +Avertisment; calculul nu continuă.
Divizare la zero8, 0, /Avertisment; împărțirea nu se execută.
Justificarea soluției: conversia este protejată de try/except, iar împărțirea este executată numai după verificarea lui b == 0.
08
EXERCIȚII DE BAZĂ

Aplică direct

  1. Realizează un calculator care adună două numere.
  2. Construiește un calculator pentru aria unui dreptunghi, citind lungimea și lățimea.
  3. Realizează un convertor de temperatură Celsius în Fahrenheit.
  4. Creează un formular cu nume, clasă și observații și afișează un mesaj de informare la apăsarea unui buton.
  5. Realizează un calculator care permite calcularea sumei sau diferenței a două numere.
09
EXERCIȚII DE APROFUNDARE

Construiește aplicații mai robuste

  1. Extinde calculatorul cu înmulțire și împărțire și tratează împărțirea la zero.
  2. Construiește o aplicație care citește trei numere și afișează maximul folosind conceptele algoritmice deja studiate.
  3. Realizează un formular care verifică dacă un câmp este gol și afișează un avertisment.
  4. Construiește o aplicație de calcul al ariei unui cerc; tratează cazul unei valori care nu poate fi convertită la float.
  5. Proiectează o aplicație cu două Frame-uri: unul pentru date și unul pentru rezultate. Explică de ce această structură este mai ușor de întreținut.
  6. Analizează ce se întâmplă dacă utilizatorul apasă butonul de calcul înainte de a completa câmpurile.
10
VERIFICARE

Quiz final

1. Care este fluxul de bază al unei aplicații grafice interactive?

2. De ce convertim valoarea citită cu Entry.get() înainte de un calcul numeric?

3. Ce poate apărea la float("abc")?

4. Ce trebuie verificat înainte de a calcula a / b?

5. Ce rol are messagebox.showwarning() într-o aplicație?

6. Ce permite o aplicație grafică bine testată?

11
MINI-PROIECT

Aplicația „Instrumente pentru elev”

MISIUNE

Aplicația „Instrumente pentru elev”

Realizează o aplicație grafică alcătuită din două zone: „Calcul” și „Date”. În zona de calcul, utilizatorul poate introduce două numere și poate calcula suma, diferența, produsul și câtul. În zona de date, include un mic formular cu nume și clasă. Folosește Frame, Label, Entry, Button, MessageBox și o metodă de organizare potrivită.

Cerințe

get() + conversie01
date invalide02
împărțire la zero03
rezultate în interfață04
Frame-uri logice05
teste relevante06

Ai terminat lecția?

Testează aplicația pe caz normal, caz-limită, caz particular, date invalide și împărțire la zero.