Python-Tkinter-Projekte [Schritt-für-Schritt-Erklärung]
Veröffentlicht: 2020-09-14Das Erlernen von GUI in Python kann ziemlich herausfordernd sein. Machen Sie sich keine Sorgen, denn wir haben Ihren Rücken! In diesem Artikel haben wir ein Tkinter-Tutorial geteilt, damit Sie effizient an Python-GUI-Projekten arbeiten können. Nach Abschluss dieses Tutorials sind Sie mit den Bausteinen zum Erstellen von Python-Tkinter-Projekten vertraut. Wenn Sie mehr Fachwissen in Python erwerben möchten, sehen Sie sich unsere Data-Science-Programme an.
Wir haben auch den Code für jeden Schritt geteilt. Wir empfehlen jedoch, dass Sie es nur kopieren und einfügen, wenn Sie verstehen, wie es funktioniert. Sonst würde es nicht viel nützen.
Inhaltsverzeichnis
Was ist Tkinter?
Tkinter ist ein Paket für Python zur Verwendung des Tk-GUI-Toolkits. Sie können Tkinter zum Erstellen von GUI-Programmen über Python verwenden. Während Tkinter in der Lage ist, viele Programme zu erstellen, müssen Sie möglicherweise Module für fortgeschrittene Implementierungen verwenden. Sie sollten mit den Grundlagen von Tkinter vertraut sein, bevor Sie an Python-Tkinter-Projekten arbeiten:
Ein Hello World-Programm in Tkinter
Hier ist ein Beispiel für ein Hallo-Welt-Programm in Tkinter:
importiere tkinter als tk
Klasse Application(tk.Frame):
def __init__(self, master=None):
super().__init__(Meister)
self.master = Meister
self.pack()
self.create_widgets()
def create_widgets(selbst):
self.hi_there = tk.Button(selbst)
self.hi_there[„text“] = „Hallo Welt\n(klick mich)“
self.hi_there[„Befehl“] = self.say_hi
self.hi_there.pack(side="top")
self.quit = tk.Button(self, text=“QUIT“, fg=“red“,
Befehl=self.master.destroy)
self.quit.pack(side="bottom")
def sag_hi(selbst):
print(“Hallo zusammen!”)
Wurzel = tk.Tk()
app = Anwendung(master=root)
app.mainloop()
Geometrie-Manager in Tkinter
Ein weiteres Hauptkonzept, das Sie bei der Arbeit an Python-Tkinter-Projekten kennen sollten, sind Geometriemanager. Ohne die Verwendung eines Geometriemanagers würden Ihre Widgets nicht auf dem Bildschirm erscheinen. Es gibt hauptsächlich drei Möglichkeiten, wie Sie einen Geometriemanager hinzufügen können:
Netz
Es fügt dem übergeordneten Element ein Raster hinzu und ermöglicht es ihm, Widgets entsprechend anzuzeigen. Das Raster hat Zeilen und Spalten zum Messen der Länge und Höhe seiner Widgets.
Pack
Diese Methode weist das Widget an, sich selbst in das übergeordnete Element zu packen. Es fügt das Widget nur zu einer Liste von untergeordneten Widgets für das übergeordnete Element hinzu. Einfach ausgedrückt fügt es sie einem Block hinzu, bevor es sie in einem übergeordneten Widget platziert.
Ort
Diese Methode platziert Widgets an einem bestimmten Ort entsprechend dem übergeordneten Widget.
In unserem Tutorial unten haben wir den Pack Manager verwendet, um die Position unserer Widgets zu verwalten. Deshalb ist es am besten, wenn Sie mit diesen Konzepten vertraut sind. Es würde Ihnen helfen, die Funktionsweise unseres Projekts besser zu verstehen.
Checkout: 42 spannende Python-Projektideen und -themen für Anfänger
Erstellen einer GUI in Python (Tkinter-Tutorial)
Schritt Nr. 1: Importieren des Moduls
Um mit der Arbeit an der Anwendung zu beginnen, müssen wir zunächst das erforderliche Modul importieren. Sie können dies tun, indem Sie das Modul in Ihren Namensraum importieren. Es würde Ihnen erlauben, die Konstanten und Klassen mit ihren Namen zu verwenden, anstatt sie zu qualifizieren. Das bedeutet, dass Sie „Label“ verwenden können, indem Sie seinen Namen verwenden, anstatt es als „TkinterLabel“ zu qualifizieren. Es würde die Dinge relativ einfach machen und Sie können viel Zeit sparen, da es sehr umständlich sein kann, sich für jede Klasse und Konstante zu qualifizieren. Verwenden Sie den folgenden Code, um das Modul zu importieren:
>>> aus Tkinter importieren *
Wenn Python in Ihrem System nicht mit Tk (oder Tcl) verknüpft ist oder Tk (oder Tcl) nicht auf Ihrem System installiert ist, wird in diesem Abschnitt eine Fehlermeldung angezeigt. Um dieses Problem zu beheben, benötigen Sie den Administrator Ihres Systems für den Zugriff. Stellen Sie sicher, dass Sie dieses Problem lösen, indem Sie dasselbe tun.
Wenn Sie andererseits in diesen Abschnitten keine Fehlermeldungen sehen, können Sie mit dem nächsten Schritt fortfahren, um ein Fenster zu erstellen:
>>> gewinnen = Tk()
Wir haben unserem Fenster die Variable „win“ zugewiesen. Nachdem Sie den obigen Code implementiert haben, sehen Sie ein kleines Fenster auf dem Bildschirm. In der Titelleiste sollte „tk“ stehen.
Dies bedeutet, dass Sie diesen Schritt erfolgreich abgeschlossen haben und jetzt mit dem Erstellen der GUI in Python beginnen können.
Schritt Nr. 2: Schaltflächen hinzufügen
Nachdem wir unser Tkinter ausgeführt haben, können wir unserem Programm Schaltflächen hinzufügen. Schaltflächen sind der einfachste Abschnitt eines jeden GUI-Programms, also beginnen wir mit ihnen:
>>> b1 = Button(win, text="One")
>>> b2 = Button(gewinnen, text=”Zwei”)
Das Fenster, das wir im letzten Abschnitt erstellt haben, ist das übergeordnete Fenster für die Schaltflächen, die wir jetzt erstellt haben. Wenn Sie an weiteren Python-Tkinter-Projekten arbeiten, werden Sie feststellen, dass Frames auch als Eltern für andere Klassen fungieren können. Wenn Sie nun diesen Code implementieren, würden Sie einen seltsamen Vorfall bemerken – Die Schaltflächen erscheinen nicht im Fenster!
Das liegt daran, dass wir unserem Programm ein Grid und ein Pack hinzufügen müssen. Sie werden als Geometriemanager bezeichnet und wir haben sie weiter oben in diesem Artikel besprochen. Wir werden den Paketmanager in unserem nächsten Abschnitt hinzufügen:
Schritt Nr. 3: Implementieren des Pack Managers
Wir verwenden die Pack-Methode, um unsere Schaltflächen zum übergeordneten Widget hinzuzufügen. Mit dem Pack-Manager können Sie angeben, auf welcher Seite des übergeordneten Widgets Ihr untergeordnetes Widget gepackt werden soll. Sie können OBEN, RECHTS, UNTEN, LINKS als Ihre Funktionen verwenden. Das Programm wählt TOP als Standard, wenn Sie keine Seite angeben. Lassen Sie uns zuerst den Paketmanager hinzufügen:
>>> b1.pack()
>>> b2.pack()
Wenn Sie die erste Schaltfläche (erste Zeile des Codes) hinzufügen, werden Sie feststellen, dass Ihr Fenster auf die Größe der Schaltfläche schrumpft. Wenn Sie die zweite Schaltfläche (zweite Zeile des Codes) hinzufügen, wird das Fenster entsprechend der Größe dieser Schaltfläche erweitert. Das Fenster hat die Schaltflächen in vertikaler Reihenfolge angeordnet, da wir nicht angegeben haben, auf welcher Seite sie gepackt werden sollen. Lassen Sie uns sie auf der linken Seite packen, indem Sie den folgenden Code verwenden:
>>> b2.pack(Seite=LINKS)
>>> b1.pack(Seite=LINKS)
Beachten Sie, dass wir den Pack-Manager meistens verwenden, wenn wir unsere Widgets nur in diesen beiden Reihenfolgen (horizontal und vertikal) platzieren müssen. Für andere Arten von Widget-Platzierungen verwenden wir die Rastermethode oder die Platzierungsmethode. Sie können mit den Funktionen 'padx' oder 'pady' etwas Abstand zwischen den Schaltflächen und dem Fenster hinzufügen. Die 'padx'-Funktion fügt der X-Achse (links und rechts) des Widgets eine Auffüllung hinzu, und die 'pady'-Funktion fügt der Y-Achse (oben und unten) des Geräts eine Auffüllung hinzu.
>>> b1.pack(Seite=LINKS, padx=10)
>>> b2.pack (Seite=LINKS, Padx=10)
Wir empfehlen, mit der Polsterung der Widgets zu experimentieren. Es würde Ihnen helfen, die verschiedenen Möglichkeiten zu verstehen, wie Sie die Platzierung von Widgets ändern können. Das Polstern ist ein schwierig zu meisterndes Konzept, daher ist es am besten, es auszuprobieren, bevor Sie mit dem nächsten Abschnitt fortfahren.
Schritt Nr. 4: Der Grid-Manager
Ein weiterer beliebter Geometriemanager in Tkinter ist der Grid-Manager. Wie wir bereits in unserem Artikel besprochen haben, ermöglicht Ihnen der Grid-Manager, das übergeordnete Element in Zeilen und Spalten zu unterteilen. Sie können die untergeordneten Widgets in den Zellen des übergeordneten Rasters platzieren. Sie können die Breite und Länge jeder Spalte und Zeile Ihren Anforderungen entsprechend ändern. Nicht jede Spalte muss gleich breit sein. Ebenso muss nicht jede Zeile die gleiche Höhe haben. Der Grid-Manager gibt Ihnen also mehr kreative Freiheit bei der Bearbeitung des Aussehens und der Platzierung Ihrer Widgets.
Wir erstellen ein neues Fenster mit denselben Schaltflächen, die wir zuvor erstellt haben, um den Grid-Manager zu testen. Wir fügen die Schaltflächen jedoch in einem 2 × 2-Raster hinzu:
>>> gewinnen = Tk()
>>> b1 = Button(win, text="One")
>>> b2 = Button(win,text="Two")
>>> b1.grid(Zeile=0, Spalte=0)
>>> b2.grid(Zeile=1, Spalte=1)
Sie werden feststellen, dass unser Programm einige Zellen leer gelassen hat. Das liegt daran, dass wir Zeile 0, Spalte 1 (oder Zeile 1 und Spalte 0) nichts hinzugefügt haben. Wir werden ein neues Widget ausprobieren, um etwas Interessantes zu sehen:
>>> l = Label(win, text="Dies ist ein Label")
>>> l.grid(Zeile=1, Spalte=0)
Sobald Sie den obigen Code hinzugefügt haben, stellen Sie fest, dass sich die zweite Schaltfläche nach rechts verschiebt, um den Text aufzunehmen. Probieren Sie den Grid-Manager am besten mit mehreren Widgets aus, um zu sehen, wie er funktioniert.

Muss gelesen werden: Django-Entwicklergehalt in Indien
Schritt #5: Verbesserung des Layouts
In diesem Abschnitt werden wir ein neues Widget namens Frame ausprobieren. Ein Frame dient nur dazu, andere Widgets zu enthalten. Sie können mehrere Widgets in einen Rahmen packen oder ein Raster verwenden, um sie darin zu platzieren. Sie können auch verschiedene Rahmen in einen einzigen Rahmen packen. Mit dieser Funktion können Sie erweiterte Layouts für Ihr GUI-Programm erstellen. Beispielsweise fügen wir drei Schaltflächen hintereinander zu einem Rahmen hinzu. Fügen Sie die Schaltflächen horizontal hinzu und packen Sie das Etikett dann vertikal mit dem Rahmen:
>>> gewinnen = Tk()
>>> f = Frame(gewinn)
>>> b1 = Knopf (f, „Eins“)
>>> b2 = Knopf (f, „Zwei“)
>>> b3 = Knopf (f, „Drei“)
>>> b1.pack(Seite=LINKS)
>>> b2.pack(Seite=LINKS)
>>> b3.pack(Seite=LINKS)
>>> l = Label(win,“Dieses Label ist über allen Buttons“)
>>> l.pack()
>>> f.pack()
Wie wir bereits früher in diesem Artikel besprochen haben, können Sie auch die Place-Methode als Geometrie-Manager verwenden. Mit der Place-Methode können Sie Widgets an einer bestimmten Stelle innerhalb eines Fensters oder eines Rahmens platzieren. Wir empfehlen jedoch, die Place-Methode nicht häufig zu verwenden, da sie die Reaktionsfähigkeit des Programms einschränkt.
Mit der Grid-Funktion können Sie den „Sticky“-Parameter verwenden, mit dem Sie Kartenkoordinaten (S, N, W, SW, NE usw.) zum Angeben von Widget-Platzierungen verwenden können. Bevor wir zum nächsten Abschnitt übergehen, vergewissern Sie sich, dass Sie die bisher besprochenen Funktionen verstehen. Testen Sie das Raster und die Rahmenfunktionen zusammen, um zu sehen, wie Sie es in anderen Python-GUI-Projekten verwenden können.
Schritt Nr. 6: Schaltflächen nützlich machen
Wenn Sie auf die Schaltflächen klicken, die wir bisher erstellt haben, müssen Sie bemerkt haben, dass sie nicht reagieren (sie tun nichts). Sie werden gedrückt, wenn Sie darauf klicken, und werden hervorgehoben, wenn Sie mit der Maus darüber fahren, aber sie führen keine Funktionen aus. Damit unsere Schaltflächen bestimmte Funktionen ausführen, müssen wir die Funktion „Konfigurieren“ verwenden.
Wir können jedes Schlüsselwortargument an die „configure“-Methode eines Widgets übergeben, um es während der Erstellung zu übergeben. Hier ist ein Beispiel:
>>> b1.configure(text="Uno")
Der Parameter „command“ verknüpft die Schaltflächen mit Callback-Funktionen, wenn Sie sie erstellen oder ihnen „configure“ hinzufügen. Um zu verstehen, wie es funktioniert, erstellen wir eine Funktion, die eine Nachricht ausgibt:
>>> defbut1():
… print(“Taste eins wurde gedrückt”)
…
>>> b1.configure(command=but1)
Wenn Sie also auf die entsprechende Schaltfläche klicken, wird eine Nachricht gedruckt.
Schritt Nr. 7: Eingabe-Widgets hinzufügen
Eingabe-Widgets ermöglichen es Benutzern, Text in das Programm einzugeben. Allerdings müssten wir das Eingabe-Widget so funktionsfähig machen, wie wir es mit den Schaltflächen getan haben. Ein Eingabe-Widget muss Text abrufen (und festlegen). Damit das Eingabe-Widget diese Funktion ausführen kann, müssen Sie das Tkinter-Objekt „StringVar“ verwenden. Das 'StringVar'-Objekt hält den Text in Form eines Strings und macht ihn durch get lesbar.
Wir erstellen ein neues Fenster, um unsere Eingabe-Widgets zu testen:
>>> gewinnen = Tk()
>>> v = StringVar()
>>> e = Entry(win,textvariable=v)
>>> e.pack()
Lassen Sie uns nun „this is a test“ als Eintrag hinzufügen und dasselbe über StringVar abrufen:
>>> v.get()
"dies ist ein Test"
Sie können jetzt den Text in StringVar setzen und ihn im Widget erscheinen lassen:
>>> v.set („dies wird vom Programm gesetzt“)
Zusätzliches Widget: Das Listbox-Widget
Neben dem Eintrags-Widget können wir ein Listbox-Widget hinzufügen. Ein Listbox-Widget lässt den Benutzer ein Element aus einem Menü auswählen. Wir erstellen ein neues Fenster, um das Listbox-Widget auszuprobieren:
>>> gewinnen = Tk()
>>> lb = Listbox(win, Höhe=3)
>>> lb.pack()
>>> lb.insert(END, „erster Eintrag“)
>>> lb.insert(END, „zweiter Eintrag“)
>>> lb.insert(END, „dritter Eintrag“)
>>> lb.insert(END, „vierter Eintrag“)
Sie können Elemente am Anfang, in der Mitte und am Ende der Liste einfügen. Sie können sie auch löschen. Wenn die Liste zu viele Elemente enthält, können Sie eine Bildlaufleiste hinzufügen:
>>> sb = Scrollbar(win, orient=VERTICAL)
>>> sb.pack(side=LEFT, fill=Y)
Um unsere Bildlaufleiste funktionsfähig zu machen, müssen wir Rückruffunktionen verwenden:
>>> sb.configure(command=lb.yview)
>>> lb.configure(yscrollcommand=sb.set)
Die Curselection-Methode gibt Ihnen ein Element zurück, wenn Sie es im Listenfeld auswählen. Es wird ein leeres Tupel zurückgegeben, wenn Sie keine Elemente auswählen.
Schritt Nr. 8: Letzte Schritte
Wir verwenden all das, was wir in unserem Tkinter-Tutorial gelernt haben, um einen Telefonlisten-Editor zu erstellen:
Gesamtcode
#!/usr/bin/env python3
von tkinter import *
aus Telefonimport *
def which_selected():
print(“Bei {0}”.format(select.curselection()))
return int(select.curselection()[0])
def add_entry():
phonelist.append([fnamevar.get(), lnamevar.get(), phonevar.get()])
set_select()
def update_entry():
Telefonliste[welche_selektierte()] = [fnamevar.get(),
lnamevar.get(),
phonevar.get()]
def delete_entry():
del Telefonliste[welche_ausgewählt()]
set_select()
def load_entry():
fname, lname, phone = Telefonliste[welche_selektierte()]
fnamevar.set(fname)
lnamevar.set(lname)
phonevar.set(Telefon)
def make_window():
global fnamevar, lnamevar, phonevar, select
gewinnen = Tk()
frame1 = Frame(gewinnen)
frame1.pack()
Label(frame1, text=”Vorname”).grid(row=0, column=0, sticky=W)
fnamevar = StringVar()
fname = Eintrag(frame1, textvariable=fnamevar)
fname.grid (Zeile = 0, Spalte = 1, Sticky = W)
Label(frame1, text=”Nachname”).grid(row=1, column=0, sticky=W)
lnamevar = StringVar()
lname = Eintrag (frame1, textvariable=lnamevar)
lname.grid (Zeile = 1, Spalte = 1, sticky = W)
Label(frame1, text=”Phone”).grid(row=2, column=0, sticky=W)
phonevar = StringVar()
phone = Eintrag(frame1, textvariable=phonevar)
phone.grid (Zeile = 2, Spalte = 1, Sticky = W)
frame2 = Frame(win) # Reihe von Schaltflächen
frame2.pack()
b1 = Button(frame2, text=“Add“, command=add_entry)
b2 = Button(frame2, text=”Update”, command=update_entry)
b3 = Button(Frame2, Text=“Löschen“, Befehl=Eintrag löschen)
b4 = Button(frame2, text=“Laden“, command=load_entry)
b5 = Button(frame2, text=“Refresh“, command=set_select)
b1.pack (Seite = LINKS)
b2.pack (Seite = LINKS)
b3.pack (Seite = LINKS)
b4.pack (Seite = LINKS)
b5.pack (Seite = LINKS)
frame3 = Frame(win) # Auswahl von Namen
frame3.pack()
scroll = Scrollbar(frame3, orient=VERTICAL)
select = Listbox(frame3, yscrollcommand=scroll.set, height=6)
scroll.config (Befehl=select.yview)
scroll.pack (Seite = RECHTS, Füllung = Y)
select.pack(side=LEFT, fill=BOTH, expand=1)
Rückgewinn
def set_select():
phonelist.sort(key=lambda record: record[1])
select.delete(0, ENDE)
für fname, lname, phone in der Telefonliste:
select.insert(END, „{0}, {1}“.format(lname, fname))
win = make_window()
set_select()
win.mainloop()
Hier die Telefonliste:
Telefonliste = [['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'],
['Maria', 'Zigler', '812-567-8901'],
['Bob', 'Smith', '856-689-1234']]
Das Programm, das wir hier geteilt haben, ist ein Beispiel. Sie können Ihr Programm mit den Funktionen erstellen, die wir in diesem Tkinter-Tutorial besprochen haben. Dem oben genannten Programm fehlen mehrere Funktionen, z. B. hat es keine Möglichkeit, Änderungen zu speichern. Sie können die Speicherfunktion selbst hinzufügen, indem Sie eine Schaltfläche erstellen, die diese Aufgabe ausführen kann.
Muss gelesen werden: Markov-Kette im Python-Tutorial
Erfahren Sie mehr über Python und Python-GUI-Projekte
Die Arbeit an Python-Tkinter-Projekten kann ziemlich viel Spaß machen, wenn Sie wissen, was Sie tun. Sie sind auch eine großartige Möglichkeit, Ihre Stärken (und Schwächen) zu verstehen. Sie können mehr über Python erfahren; Wir empfehlen den Besuch unseres Blogs. Hier sind einige Ressourcen zum Weiterlesen:
- 10 Python-GUI-Projekte
- Wie erstelle ich einen Chatbot in Python?
- 42 Ideen für Python-Projekte
Was denken Sie über dieses Projekt? Haben Sie an anderen Python-Tkinter-Projekten gearbeitet? Lass uns wissen.
Wenn Sie neugierig sind, etwas über Data Science zu lernen, schauen Sie sich das Executive PG Program in Data Science von IIIT-B & upGrad an, das für Berufstätige entwickelt wurde und mehr als 10 Fallstudien und Projekte, praktische Workshops, Mentoring mit Branchenexperten, 1 -on-1 mit Branchenmentoren, mehr als 400 Stunden Lern- und Jobunterstützung bei Top-Unternehmen.
Ist Python geeignet, um grafische Benutzeroberflächen zu erstellen?
Python verfügt über eine Reihe von Frameworks für grafische Benutzeroberflächen, die von Tkinter bis zu einer Reihe anderer plattformübergreifender Lösungen sowie plattformspezifischen Bindungen reichen. Das Erstellen grafischer Benutzeroberflächen ist schnell und einfach, wenn Python mit Tkinter kombiniert wird. Python ist ideal für die GUI-Erstellung, da es viele integrierte Widgets hat, Fenster schnell generiert, über starke Ereignisbehandlungstechniken verfügt und über rudimentäre Zeichenfunktionen verfügt.
Tkinter oder KIVY: Was ist besser zu verwenden?
Kivy ist ein kostenloses Open-Source-Python-Framework zum Erstellen oder Entwerfen einzigartiger, aber ansprechender Benutzeroberflächenprogramme. Wenn Sie ein Python-Entwickler sind, der gerne Apps erstellt, ist KIVY eine ausgezeichnete Wahl für die Erstellung dynamischerer Anwendungen. Tkinter ist die am weitesten verbreitete Python-Schnittstelle zur schnellen und einfachen Entwicklung von GUI-Anwendungen. Wenn Sie neu bei Python sind und lernen möchten, wie man Computerschnittstellen erstellt, beginnen Sie mit Tkinter und lernen Sie die Grundlagen.