Proiecte Python Tkinter [Explicație pas cu pas]

Publicat: 2020-09-14

Învățarea despre GUI în Python poate fi destul de dificilă. Nu-ți face griji, pentru că îți oferim spatele! În acest articol, am distribuit un tutorial Tkinter, astfel încât să puteți lucra eficient la proiectele GUI Python. După finalizarea acestui tutorial, veți fi familiarizați cu elementele de bază pentru crearea proiectelor Python Tkinter. Dacă doriți să obțineți mai multă experiență în python, consultați programele noastre de știință a datelor.

De asemenea, am distribuit codul pentru fiecare pas. Cu toate acestea, vă recomandăm să îl copiați și să lipiți numai atunci când înțelegeți cum funcționează. Altfel, nu ar fi de mare folos.

Cuprins

Ce este Tkinter?

Tkinter este un pachet pentru Python pentru a utiliza setul de instrumente Tk GUI. Puteți utiliza Tkinter pentru a crea programe GUI prin Python. În timp ce Tkinter este capabil să producă multe programe, ar putea fi necesar să utilizați module pentru implementări avansate. Ar trebui să vă familiarizați cu elementele de bază ale Tkinter înainte de a lucra la proiecte Python Tkinter:

Un program Hello World în Tkinter

Iată un exemplu de program Hello World în Tkinter:

import tkinter ca tk

Aplicație de clasă (tk.Frame):

def __init__(self, master=None):

super().__init__(master)

self.master = stăpân

self.pack()

self.create_widgets()

def create_widgets(self):

self.hi_there = tk.Button(self)

self.hi_there[“text”] = „Bună lume\n(dați clic pe mine)”

self.hi_there[„comanda”] = self.say_hi

self.hi_there.pack(side=”sus”)

self.quit = tk.Button(self, text=”QUIT”, fg=”red”,

comanda=self.master.destroy)

self.quit.pack(side=”bottom”)

def say_hi(self):

print(„bună ziua, tuturor!”)

rădăcină = tk.Tk()

aplicație = Aplicație (master=rădăcină)

app.mainloop()

Manageri de geometrie în Tkinter

Un alt concept principal despre care ar trebui să știți când lucrați la proiecte Python Tkinter este managerii de geometrie. Fără utilizarea unui manager de geometrie, widget-urile dvs. nu ar apărea pe ecran. Există în principal trei moduri în care puteți adăuga un manager de geometrie:

Grilă

Acesta adaugă o grilă părinte și îi permite să arate widget-urile în consecință. Grila are rânduri și coloane pentru măsurarea lungimii și înălțimii widget-urilor sale.

Ambalaj

Această metodă îi spune widget-ului să se împacheteze în părinte. Acesta adaugă widget-ul doar la o listă de widget-uri pentru copii pentru părinte. În termeni simpli, le adaugă la un bloc înainte de a le plasa într-un widget părinte.

Loc

Această metodă plasează widget-urile într-o anumită locație în funcție de widget-ul părinte.

În tutorialul nostru de mai jos, am folosit managerul de pachete pentru a gestiona poziția widget-urilor noastre. De aceea, cel mai bine ar fi dacă sunteți familiarizat cu aceste concepte. Te-ar ajuta să înțelegi mai bine funcționarea proiectului nostru.

Checkout: 42 de idei și subiecte interesante pentru proiecte Python pentru începători

Construirea unei GUI în Python (Tkinter Tutorial)

Pasul #1: Importul modulului

Pentru a începe lucrul la aplicație, mai întâi trebuie să importam modulul necesar. Puteți face acest lucru importând modulul în spațiul dvs. de nume. V-ar permite să utilizați constantele și clasele după numele lor în loc să le calificați. Aceasta înseamnă că puteți folosi „Label” folosind numele său în loc să îl calificați drept „TkinterLabel”. Ar face lucrurile relativ ușor și puteți economisi mult timp, deoarece calificarea fiecărei clase și constantă poate fi foarte greoaie. Utilizați următorul cod pentru a importa modulul:

>>> din importul Tkinter *

Dacă Python nu este conectat la Tk (sau Tcl) în sistemul dvs. sau dacă nu aveți Tk (sau Tcl) instalat în sistemul dvs., veți vedea un mesaj de eroare în această secțiune. Pentru a remedia această problemă, veți avea nevoie de administratorul sistemului pentru acces. Asigurați-vă că rezolvați această problemă făcând același lucru.

Pe de altă parte, dacă nu vedeți niciun mesaj de eroare în aceste secțiuni, puteți trece la pasul următor pentru a crea o fereastră:

>>> câștig = Tk()

Am atribuit ferestrei noastre variabila „win”. După implementarea codului de mai sus, veți putea vedea o mică fereastră pe ecran. Bara de titlu ar trebui să arate „tk” scris în ea.

Aceasta înseamnă că ați finalizat acest pas cu succes și că acum puteți începe să construiți GUI în Python.

Pasul #2: Adăugarea de butoane

Acum că avem Tkinter în funcțiune, putem adăuga butoane la programul nostru. Butoanele sunt cea mai simplă secțiune a oricărui program GUI, așa că vom începe cu ele:

>>> b1 = Buton(win, text=”One”)

>>> b2 = Buton(win, text=”Doi”)

Fereastra pe care am creat-o în ultima secțiune este părintele pentru butoanele pe care le-am făcut acum. Pe măsură ce veți lucra la mai multe proiecte Python Tkinter, veți descoperi că cadrele pot acționa și ca părinți pentru alte clase. Acum, când implementați acest cod, veți observa o apariție ciudată – Butoanele nu apar în fereastră!

Asta pentru că trebuie să adăugăm o grilă și un pachet la programul nostru. Aceștia se numesc manageri de geometrie și le-am discutat mai devreme în acest articol. Vom adăuga managerul de pachete în următoarea noastră secțiune:

Pasul #3: Implementarea pachetului Manager

Vom folosi metoda pack pentru a adăuga butoanele noastre la widget-ul părinte. Cu managerul de pachete, puteți spune pe ce parte a widget-ului părinte doriți să fie împachetat widgetul pentru copil. Puteți utiliza SUS, DREAPTA, JOS, STÂNGA ca funcții. Programul selectează TOP ca implicit dacă nu specificați o parte. Să adăugăm mai întâi managerul de pachete:

>>> b1.pack()

>>> b2.pack()

Când adăugați primul buton (prima linie a codului), veți observa că fereastra dvs. se micșorează la dimensiunea butonului. În mod similar, când adăugați al doilea buton (a doua linie a codului), fereastra se extinde în funcție de dimensiunea butonului respectiv. Fereastra a plasat butoanele în ordine verticală, deoarece nu am specificat pe ce parte ar trebui să fie împachetate. Să le împachetăm în stânga utilizând codul de mai jos:

>>> b2.pack(lateral=STÂNGA)

>>> b1.pack(lateral=STÂNGA)

Rețineți că folosim managerul de pachete mai ales atunci când trebuie să ne plasăm widget-urile în aceste două ordine (orizontală și verticală). Pentru alte tipuri de plasări widget, folosim metoda grilă sau metoda plasării. Puteți adăuga spațiu între butoane și fereastră folosind funcțiile „padx” sau „pady”. Funcția „padx” adaugă umplutură pe axa X (stânga și dreapta) a widget-ului, iar funcția „pady” adaugă umplutură pe axa Y (sus și jos) a dispozitivului.

>>> b1.pack(lateral=STÂNGA, padx=10)

>>> b2.pack(side=LEFT, padx=10)

Vă recomandăm să experimentați cu umplutura widget-urilor. Te-ar ajuta să înțelegi diferitele moduri în care poți modifica plasarea widget-urilor. Căptușeala este un concept dificil de stăpânit, așa că cel mai bine ar fi să îl încercați înainte de a trece la următoarea secțiune.

Pasul #4: Managerul de rețea

Un alt manager de geometrie popular în Tkinter este managerul de grilă. După cum am discutat mai devreme în articolul nostru, managerul de grilă vă permite să împărțiți părintele în rânduri și coloane. Puteți plasa widget-urile copil în celulele grilei părintelui. Puteți modifica lățimea și lungimea fiecărei coloane și rânduri în funcție de cerințele dumneavoastră. Nu fiecare coloană trebuie să aibă aceeași lățime. În mod similar, fiecare rând nu trebuie să aibă aceeași înălțime. Deci, managerul grilei vă oferă mai multă libertate creativă în ceea ce privește editarea aspectului și plasarea widget-urilor.

Vom crea o nouă fereastră cu aceleași butoane pe care le-am creat înainte pentru a testa managerul de grilă. Cu toate acestea, vom adăuga butoanele într-o grilă 2×2:

>>> câștig = Tk()

>>> b1 = Buton(win, text=”One”)

>>> b2 = Buton(win,text=”Doi”)

>>> b1.grid(rând=0, coloană=0)

>>> b2.grid(rând=1, coloană=1)

Veți observa că programul nostru a lăsat unele celule goale. Asta pentru că nu am adăugat nimic la rândul 0, coloana 1 (sau rândul 1 și coloana 0). Vom încerca un nou widget pentru a vedea ceva interesant:

>>> l = Label(win, text=”Aceasta este o etichetă”)

>>> l.grid(rând=1, coloană=0)

Odată ce adăugați codul de mai sus, observați că al doilea buton se deplasează la dreapta pentru a acomoda textul. Cel mai bine ar fi să încercați managerul de grilă cu mai multe widget-uri pentru a vedea cum funcționează.

Trebuie citit: Salariul dezvoltatorului Django în India

Pasul #5: Îmbunătățirea aspectului

În această secțiune vom încerca un nou widget numit frame. Un cadru este doar pentru a conține alte widget-uri. Puteți împacheta mai multe widget-uri într-un cadru sau puteți utiliza o grilă pentru a le plasa în același. De asemenea, puteți împacheta diferite rame într-un singur cadru. Această caracteristică vă permite să creați machete avansate pentru programul dvs. GUI. De exemplu, vom adăuga trei butoane la un cadru la rând. Adăugați butoanele pe orizontală și apoi împachetați eticheta pe verticală cu cadrul:

>>> câștig = Tk()

>>> f = Frame(win)

>>> b1 = Buton (f, „Unul”)

>>> b2 = Buton(f, „Doi”)

>>> b3 = Buton(f, „Trei”)

>>> b1.pack(lateral=STÂNGA)

>>> b2.pack(lateral=STÂNGA)

>>> b3.pack(lateral=STÂNGA)

>>> l = Etichetă (câștigă, „Această etichetă este peste toate butoanele”)

>>> l.pack()

>>> f.pack()

După cum am discutat mai devreme în articol, puteți utiliza și metoda locului ca manager de geometrie. Metoda locului vă permite să plasați widget-uri într-o anumită locație într-o fereastră sau un cadru. Cu toate acestea, nu vă recomandăm să folosiți frecvent metoda plasării, deoarece restricționează capacitatea de răspuns a programului.

Cu funcția de grilă, puteți utiliza parametrul „lipicios” care vă permite să utilizați coordonatele hărții (S, N, W, SW, NE etc.) pentru a specifica pozițiile widgetului. Înainte de a trece la următoarea secțiune, asigurați-vă că înțelegeți funcțiile despre care am discutat încă. Testați grila și cadrul funcționează împreună pentru a vedea cum o puteți utiliza în alte proiecte Python GUI.

Pasul # 6: A face butoanele utile

Dacă ați face clic pe butoanele pe care le-am creat până acum, probabil că ați observat că nu răspund (nu fac nimic). Acestea apasă când dați clic și evidențiați când treceți cu mouse-ul deasupra lor, dar nu îndeplinesc nicio funcție. Pentru ca butoanele noastre să îndeplinească anumite funcții, va trebui să folosim funcția „configure”.

Putem transmite orice argument al cuvântului cheie la metoda „configure” a unui widget pentru a-l transmite în timpul creării. Iată un exemplu:

>>> b1.configure(text=”Uno”)

Parametrul „comandă” leagă butoanele de funcțiile de apel invers atunci când le creați sau le adăugați „configurare”. Pentru a înțelege cum funcționează, vom crea o funcție care imprimă un mesaj:

>>> def but1():

… print(„Butonul unu a fost apăsat”)

>>> b1.configure(command=but1)

Deci, atunci când ați face clic pe butonul respectiv, va tipări un mesaj.

Pasul #7: Adăugarea widgeturilor de intrare

Widgeturile de intrare permit utilizatorilor să introducă text în program. Cu toate acestea, ar trebui să facem widgetul de intrare funcțional așa cum am făcut cu butoanele. Un widget de intrare trebuie să recupereze (și să seteze) text. Pentru ca widgetul de intrare să îndeplinească această funcție, va trebui să utilizați obiectul Tkinter „StringVar”. Obiectul „StringVar” reține textul sub forma unui șir și îl face lizibil prin get.

Vom crea o nouă fereastră pentru a testa widget-urile noastre de intrare:

>>> câștig = Tk()

>>> v = StringVar()

>>> e = Entry(win,textvariable=v)

>>> e.pack()

Să adăugăm acum „acesta este un test” ca intrare și să recuperăm același lucru prin StringVar:

>>> v.get()

"acesta este un test"

Acum puteți seta textul în StringVar și îl puteți face să apară în widget:

>>> v.set(„acesta este setat din program”)

Widget suplimentar: Widgetul Listbox

În afară de widget-ul de intrare, putem adăuga un widget listbox. Un widget cu listă permite utilizatorului să aleagă un articol dintr-un meniu. Vom crea o nouă fereastră pentru a încerca widget-ul listbox:

>>> câștig = Tk()

>>> lb = Listbox (câștig, înălțime=3)

>>> lb.pack()

>>> lb.insert(END, „prima intrare”)

>>> lb.insert(END, „a doua intrare”)

>>> lb.insert(END, „a treia intrare”)

>>> lb.insert(END, „a patra intrare”)

Puteți insera elemente la începutul, la mijloc și la sfârșitul listei. Le poți șterge și tu. Dacă există prea multe elemente pe listă, puteți adăuga o bară de defilare:

>>> sb = Scrollbar(win, orient=VERTICAL)

>>> sb.pack (partea=STÂNGA, umplere=Y)

Pentru a face bara de derulare funcțională, va trebui să folosim funcțiile de apel invers:

>>> sb.configure(command=lb.yview)

>>> lb.configure(yscrollcommand=sb.set)

Metoda de selecție vă returnează un articol atunci când îl selectați în caseta de listă. Va returna un tuplu gol dacă nu alegeți niciun element.

Pasul #8: Ultimii pași

Vom folosi toate lucrurile pe care le-am învățat în tutorialul nostru Tkinter pentru a crea un editor de liste de telefoane:

Cod total

#!/usr/bin/env python3

de la import tkinter *

din importul de telefoane *

def care_selectat():

print(„La {0}”.format(select.curselection()))

returnează int(select.curselection()[0])

def add_entry():

phonelist.append([fnamevar.get(), lnamevar.get(), phonevar.get()])

set_select()

def update_entry():

phonelist[which_selected()] = [fnamevar.get(),

lnamevar.get(),

phonevar.get()]

def delete_entry():

del phonelist[which_selected()]

set_select()

def load_entry():

fname, lname, phone = phonelist[which_selected()]

fnamevar.set(fname)

lnamevar.set(lname)

phonevar.set(telefon)

def make_window():

global fnamevar, lnamevar, phonevar, select

câștig = Tk()

frame1 = Frame(win)

frame1.pack()

Label(frame1, text=”First Name”).grid(row=0, column=0, sticky=W)

fnamevar = StringVar()

fname = Entry(frame1, textvariable=fnamevar)

fname.grid(rând=0, coloană=1, sticky=W)

Label(frame1, text=”Last Name”).grid(row=1, column=0, sticky=W)

lnamevar = StringVar()

lname = Entry(frame1, textvariable=lnamevar)

lname.grid(rând=1, coloană=1, lipicios=W)

Label(frame1, text=”Telefon”).grid(row=2, column=0, sticky=W)

phonevar = StringVar()

telefon = Intrare(cadru1, textvariable=phonevar)

phone.grid(row=2, column=1, sticky=W)

frame2 = Frame(win) # Rând de butoane

frame2.pack()

b1 = Buton(cadru2, text=” Adăugați “, comandă=adăugare_întrare)

b2 = Buton(cadru2, text=”Actualizare”, comandă=introducere_actualizare)

b3 = Buton(cadru2, text=”Șterge”, comandă=ștergere_întrare)

b4 = Buton(cadru 2, text=”Încărcare “, comandă=încărcare_introducere)

b5 = Buton(cadru2, text=”Reîmprospătare”, comandă=set_select)

b1.pack(side=LEFT)

b2.pack(side=LEFT)

b3.pack(side=LEFT)

b4.pack(side=LEFT)

b5.pack(side=LEFT)

frame3 = Frame(win) # selectare de nume

frame3.pack()

defilare = Scrollbar(cadru 3, orient=VERTICAL)

select = Listbox(frame3, yscrollcommand=scroll.set, height=6)

scroll.config(command=select.yview)

scroll.pack(side=RIGHT, fill=Y)

select.pack(side=LEFT, fill=BOTH, expand=1)

retur victorie

def set_select():

phonelist.sort(key=lambda record: record[1])

select.delete(0, END)

pentru fname, lname, telefon în lista de telefon:

select.insert(END, „{0}, {1}”.format(lname, fname))

win = make_window()

set_select()

win.mainloop()

Iată lista de telefon:

phonelist = [['Chris', 'Meyers', '241-343-4349'],

[„Robert”, „Smith”, „202-689-1234”],

[„Janet”, „Jones”, „609-483-5432”],

[„Ralph”, „Barnhart”, „215-683-2341”],

[„Eric”, „Nelson”, „571-485-2689”],

[„Ford”, „Prefect”, „703-987-6543”],

[„Mary”, „Zigler”, „812-567-8901”],

[„Bob”, „Smith”, „856-689-1234”]]

Programul pe care l-am împărtășit aici este un exemplu. Vă puteți crea programul cu funcțiile pe care le-am discutat în acest tutorial Tkinter. Programului de mai sus îi lipsesc mai multe funcționalități, cum ar fi nu are opțiunea de a salva modificări. Puteți adăuga singur funcția de salvare creând un buton care poate îndeplini această sarcină.

Trebuie citit: Lanțul Markov în Tutorial Python

Aflați mai multe despre proiectele Python și Python GUI

Lucrul la proiecte Python Tkinter poate fi destul de distractiv dacă știi ce faci. Ele sunt, de asemenea, o modalitate excelentă de a vă înțelege punctele tari (și cele slabe). Puteți afla mai multe despre Python; vă recomandăm să accesați blogul nostru. Iată câteva resurse pentru citire suplimentară:

  • 10 proiecte Python GUI
  • Cum să faci un chatbot în Python
  • 42 de idei de proiecte Python

Ce părere aveți despre acest proiect? Ați lucrat la alte proiecte Python Tkinter? Anunță-ne.

Dacă sunteți curios să aflați despre știința datelor, consultați programul Executive PG în știința datelor de la IIIT-B și upGrad, care este creat pentru profesioniști care lucrează și oferă peste 10 studii de caz și proiecte, ateliere practice practice, mentorat cu experți din industrie, 1 -on-1 cu mentori din industrie, peste 400 de ore de învățare și asistență profesională cu firme de top.

Este Python potrivit pentru crearea de interfețe grafice cu utilizatorul?

Python are o serie de cadre de interfață grafică cu utilizatorul, variind de la Tkinter la o serie de alte soluții multiplatforme, precum și legături specifice platformei. Crearea interfețelor grafice cu utilizatorul este rapidă și ușoară atunci când Python este combinat cu Tkinter. Python este ideal pentru crearea GUI deoarece are o mulțime de widget-uri încorporate, generează ferestre rapid, are tehnici puternice de gestionare a evenimentelor și are capabilități rudimentare de desen.

Tkinter sau KIVY: care este mai bine de folosit?

Kivy este un cadru Python gratuit și open-source pentru crearea sau proiectarea de programe de interfață cu utilizatorul unice, dar atrăgătoare. Dacă sunteți un dezvoltator Python căruia îi place să creeze aplicații, KIVY este o alegere excelentă pentru a crea aplicații mai dinamice. Tkinter este cea mai utilizată interfață Python pentru dezvoltarea rapid și ușor de aplicații GUI. Dacă sunteți nou în Python și doriți să învățați cum să creați interfețe pentru computer, începeți cu Tkinter și aflați elementele fundamentale.