Școala Româno-Britanică
Modulul 5 Clasa a IX-a | Python

Ora 6: Biblioteca Tkinter - interfețe grafice

Ce vei învăța astăzi: Tk, Label, Button, Entry, MessageBox; pack și grid

Rezultat practic: Construiești interfețe grafice simple cu Tkinter: ferestre, etichete, butoane și casete de text (Competența 4.5).

Competența 4.5 Săptămâna 26

Înainte de a începe

De ce contează? Un program cu ferestre și butoane poate fi folosit fără instrucțiuni scrise; Tkinter transformă calculele tale în aplicații pe care oricine le poate opera.

Ce știi deja?

În lecția trecută ai salvat date în fișiere cu open și write. Cum crezi că ar putea un program să prezinte rezultatele mai prietenos decât un print în consolă?

Ideea-cheie: În Tkinter totul este obiect: fereastra Tk(), etichetele Label, casetele Entry și butoanele Button, așezate apoi cu pack() sau grid().
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

Ce vei învăța astăzi?

După această lecție vei construi interfețe grafice (GUI) (programe cu ferestre și butoane, folosite prin clicuri) cu biblioteca Tkinter: ferestre, etichete, casete de text, butoane și casete de mesaje.

Ce este o interfață grafică (GUI) și de ce e user-friendly
Cum importăm biblioteca tkinter (colecție de funcții și obiecte gata făcute)
Fereastra principală Tk
Obiectele (elementele ferestrei) Label, Button, Entry și plasarea cu pack()/grid()
Mesajele cu MessageBox și citirea textului cu get()

Ce este o interfață grafică?

O interfață grafică (GUI) permite utilizatorului să lucreze cu ferestre, butoane și casete, prin clicuri și text, fără să scrie comenzi. Este user-friendly, adică ușor de folosit.

Analogie:

Programul cu text este ca un chestionar pe hârtie: răspunzi în scris, în ordine. Programul grafic este ca un meniu de restaurant: apeși pe ceea ce vrei și vezi imediat rezultatul.

Fereastra Tk și obiectele grafice

Importăm biblioteca cu from tkinter import *. Fereastra principală se creează cu Tk(). Apoi adăugăm obiecte: Label (etichetă de text), Button (buton), Entry (casetă de text), Text și Frame.

ObiectRolExemplu
LabelAfișează un textLabel(f, text="Salut")
ButtonButon care execută o acțiuneButton(f, text="Apasa", command=salut)
EntryCasetă în care utilizatorul scrieEntry(f)
TextZonă de text multi-linieText(f)

Obiectele se plasează în fereastră cu pack() (unul sub altul, centrat) sau cu grid() (în rânduri și coloane). Pentru a citi textul dintr-un Entry folosim metoda get().

Mesaje cu MessageBox

MessageBox afișează o casetă de dialog cu un mesaj. O aducem cu from tkinter import messagebox și o folosim astfel: messagebox.showinfo("Titlu", "Mesaj").

Start program importa biblioteca tkinter creeaza fereastra principala Tk() seteaza titlul si dimensiunea ferestrei creeaza eticheta cu textul "Introdu numele tau:" creeaza caseta de text Entry defineste functia salut(): afiseaza caseta de dialog "Salut, " + textul din caseta creeaza butonul "Apasa" legat de functia salut porneste bucla de evenimente mainloop() Stop program
Exemplu complet - aplicație cu etichetă, casetă și buton
from tkinter import *
from tkinter import messagebox

fereastra = Tk()
fereastra.title("Aplicatia mea")
fereastra.geometry("300x200")

eticheta = Label(fereastra, text="Introdu numele tau:")
eticheta.pack()

caseta = Entry(fereastra)
caseta.pack()

def salut():
    messagebox.showinfo("Mesaj", "Salut, " + caseta.get())

buton = Button(fereastra, text="Apasa", command=salut)
buton.pack()

fereastra.mainloop()

Reține: mainloop() pornește bucla de evenimente (mecanismul care așteaptă clicurile și apăsările utilizatorului) și ține fereastra deschisă. command=salut leagă butonul de funcția salut. caseta.get() citește textul introdus de utilizator.

Exercițiu de completare

Completează enunțul cu cuvintele potrivite:

Fereastra principală a unei aplicații Tkinter se creează cu ______(). Eticheta de text se creează cu ______, butonul cu ______, iar caseta de text cu ______. Obiectele le plasăm în fereastră cu ______() sau grid().

Bancă de cuvinte:
Tk Label Button Entry pack

Test de înțelegere

Test rapid - Tkinter:

1. Fereastra principală se creează cu:

2. Eticheta de text se creează cu:

3. Caseta de text în care utilizatorul scrie se creează cu:

Test suplimentar

Test suplimentar - Tkinter:

1. Importăm biblioteca Tkinter cu instrucțiunea:

2. Butonul într-o interfață Tkinter se creează cu clasa:

3. Apelul mainloop() are rolul de a:

Ai grijă la: command=salut se scrie fără paranteze: cu paranteze (command=salut()) funcția rulează imediat, nu când se apasă butonul.

Aprofundare

pack() versus grid(): pack() așază obiectele unul sub altul, centrat, cu opțiuni precum side="left", pady=10 (spațiu vertical), fill="x" sau expand=True. grid() le așază într-o grilă: grid(row=0, column=1) - potrivit pentru formulare.

  • Variabile legate: text_var = StringVar() urmat de Entry(fereastra, textvariable=text_var) leagă caseta de variabilă; textul se citește cu text_var.get().
  • Validarea numerelor: int(caseta.get()) poate da ValueError; îl prindem cu try/except și afișăm messagebox.showerror("Eroare", "Introdu un numar!").
  • Tipuri de mesaje: showinfo (informație), showwarning (atenție), showerror (eroare), askyesno (da/nu, întoarce True sau False).
  • Manipularea casetei: caseta.delete(0, END) golește caseta, caseta.insert(0, "text") pune un text inițial.
  • Arhitectură curată: separă funcțiile de calcul (care întorc valori) de funcțiile de interfață (care afișează); butonul apelează doar funcția de interfață.
APLICARE ȘI REZOLVARE DE PROBLEME

PbInfo - Aplicație cu buton

Enunț:

Cerință: Să se creeze o fereastră Tkinter care conține un Button. La apăsarea butonului, să se afișeze în MessageBox mesajul "Salut!".

Date de intrare:

Programul nu citește date de la tastatură.

Date de ieșire:

Programul afișează o fereastră grafică cu un buton; la clic apare un mesaj.

Restricții și precizări:

Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.

Exemplu:

Intrare:

(fără date de intrare)

Ieșire:

Fereastră cu buton; la clic apare "Salut!"
Cum gândim soluția:
  1. Importăm tkinter și messagebox
  2. Creăm fereastra cu Tk()
  3. Definim funcția salut() care afișează mesajul
  4. Creăm butonul cu command=salut și apelăm mainloop()
Scrie soluția în Python:
Soluție corectă:
Soluția completă
from tkinter import *
from tkinter import messagebox

f = Tk()

def salut():
    messagebox.showinfo("Mesaj", "Salut!")

b = Button(f, text="Apasa", command=salut)
b.pack()

f.mainloop()

Ce învățăm: butonul primește prin command funcția care se execută la clic, iar MessageBox afișează mesajul.

PbInfo - Casetă de text și mesaj

Enunț:

Cerință: Să se creeze o fereastră Tkinter cu un Entry și un Button. La apăsarea butonului, textul introdus în Entry să fie afișat în MessageBox (folosind get()).

Date de intrare:

Utilizatorul introduce un text în caseta Entry.

Date de ieșire:

La clic, programul afișează în MessageBox textul introdus.

Restricții și precizări:

Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.

Exemplu:

Intrare:

Utilizatorul scrie "Ana"

Ieșire:

Mesajul "Ana" apare în MessageBox
Cum gândim soluția:
  1. Importăm tkinter și messagebox
  2. Creăm fereastra, un Entry și un Button
  3. Definim funcția care citește textul cu get() și îl afișează
  4. Legăm funcția de buton cu command
Scrie soluția în Python:
Soluție corectă:
Soluția completă
from tkinter import *
from tkinter import messagebox

f = Tk()

eticheta = Label(f, text="Scrie un text:")
eticheta.pack()

caseta = Entry(f)
caseta.pack()

def afiseaza():
    messagebox.showinfo("Mesaj", caseta.get())

b = Button(f, text="Afișează", command=afiseaza)
b.pack()

f.mainloop()

Ce învățăm: metoda get() citește textul scris în Entry, iar MessageBox îl afișează utilizatorului.

EXERCIȚII PRACTICE

Exercițiul Practic: Primele interfețe grafice

Sarcini de lucru

Construiește două aplicații Tkinter complete

Sarcina 1: Trei etichete cu grid

Cerință: Construiește o aplicație Tkinter cu trei Label-uri (Nume, Prenume, Clasa) și trei Entry-uri, aranjate în rânduri și coloane cu grid().

Soluție:
from tkinter import *

f = Tk()

Label(f, text="Nume:").grid(row=0, column=0)
Label(f, text="Prenume:").grid(row=1, column=0)
Label(f, text="Clasa:").grid(row=2, column=0)

Entry(f).grid(row=0, column=1)
Entry(f).grid(row=1, column=1)
Entry(f).grid(row=2, column=1)

f.mainloop()

Verifică: grid(row, column) așază obiectele în tabel, la rândul și coloana indicate.

Sarcina 2: Pătratul numărului introdus

Cerință: Construiește o aplicație Tkinter cu un Entry și un Button. La clic, programul afișează în MessageBox pătratul numărului introdus.

Soluție:
from tkinter import *
from tkinter import messagebox

f = Tk()

eticheta = Label(f, text="Introdu un numar:")
eticheta.pack()

caseta = Entry(f)
caseta.pack()

def patrat():
    n = int(caseta.get())
    messagebox.showinfo("Rezultat", "Patratul este: " + str(n * n))

b = Button(f, text="Calculeaza", command=patrat)
b.pack()

f.mainloop()

Verifică: int(caseta.get()) transformă textul citit în număr, apoi calculăm pătratul.

Scrie pe caiet - De reținut

Titlul lecției

Biblioteca Tkinter - interfețe grafice.

Definiția lecției

O interfață grafică (GUI) permite utilizatorului să lucreze cu ferestre, butoane și casete de text, prin clicuri și text, fără comenzi scrise. În Tkinter totul este obiect: fereastra principală Tk(), etichetele Label, casetele Entry și butoanele Button, fiecare cu rolul lui. Obiectele se plasează în fereastră cu pack() (unul sub altul) sau cu grid() (în rânduri și coloane). Butonul primește prin command=nume_funcție acțiunea executată la clic, iar textul dintr-o casetă se citește cu get(). Casetele de dialog se afișează cu messagebox, iar mainloop() pornește bucla de evenimente care ține fereastra deschisă. De exemplu, o aplicație de salut citește numele din casetă și îl afișează într-o casetă de dialog.

Definiții esențiale

Algoritmul cheie - pseudocod

Start program importa biblioteca tkinter creeaza fereastra principala Tk() seteaza titlul si dimensiunea ferestrei creeaza eticheta cu textul "Introdu numele tau:" creeaza caseta de text Entry defineste functia salut(): afiseaza caseta de dialog "Salut, " + textul din caseta creeaza butonul "Apasa" legat de functia salut porneste bucla de evenimente mainloop() Stop program

Algoritmul cheie - cod Python

from tkinter import *
from tkinter import messagebox

fereastra = Tk()
fereastra.title("Aplicatia mea")
fereastra.geometry("300x200")

eticheta = Label(fereastra, text="Introdu numele tau:")
eticheta.pack()

caseta = Entry(fereastra)
caseta.pack()

def salut():
    messagebox.showinfo("Mesaj", "Salut, " + caseta.get())

buton = Button(fereastra, text="Apasa", command=salut)
buton.pack()

fereastra.mainloop()

Greșeli comune de evitat

Exemplu practic

O aplicație de verificare a notelor pentru catalog: utilizatorul introduce nota în caseta Entry, iar butonul afișează rezultatul într-o casetă de dialog MessageBox:

def verifica():
    nota = int(caseta.get())
    if nota >= 5:
        messagebox.showinfo("Rezultat", "Promovat")
    else:
        messagebox.showinfo("Rezultat", "Nepromovat")


buton = Button(fereastra, text="Verifica", command=verifica)
buton.pack()

Sfaturi practice și trucuri