Python, wie eine gui machen

In diesem Tutorial werden wir Tkinter verwenden, um eine grafische Benutzeroberfläche zu erstellen, die wir ein einfaches Telefon zu halten Liste verwenden können. Auf dem Weg werden wir mit mehrere Tkinter-Widgets durch die interaktive Python-Prompt spielen, um hoffentlich ein gutes Gefühl bekommen, wie alle Stücke zusammenarbeiten. Dann werden wir ein funktionales ereignisgesteuerte GUI-Programm studieren.







Es ist am besten, wenn Sie mit Python in einem anderen Fenster folgen entlang und beobachten Sie die Widgets kommen und gehen und sich bewegen. Stellen Sie sicher, dass Sie die gewöhnliche python.exe ausführbare verwenden und nicht eine der IDE wie IDLE oder PythonWin. Manchmal sind die Grafiken werden sie tun, stören die Grafiken schaffen wir in irgendeinem seltsamen Verhalten.

Die Menge der Tk, die in diesem Tutorial eingeführt wird, ist klein, aber überraschend effektiv für viele Anwendungen. Sie werden jedoch auch eine gute Referenz, um herauszufinden, über andere Widgets wie Checkboxen und Radiobuttons haben wollen und wie die Funktionalität der Widgets erweitern werden hier vorgestellt.

Spiele mit den Tasten

Das erste, was zu tun ist, die Tkinter Modul zu importieren. Im Allgemeinen wird dies durch den Import des Moduls in unserem lokalen Namensraum getan, damit wir die Klassen und Konstanten, die durch ihren Namen (wie Etiketten, Knopf, TOP) verwenden können, anstatt zu ständig alles zu qualifizieren (wie Tkinter.Label, Tkinter.Button, Tkinter .OBEN). So lässt das zuerst tun.

Nun, wenn dies erzeugt eine Fehlermeldung, bedeutet dies, dass entweder Tk / Tcl nicht auf Ihrem System installiert ist oder dass Python nicht mit ihm verbunden. Sie müssen das beheben, bevor Sie gehen und das wird wahrscheinlich an Ihren Systemadministrator einzubeziehen. Andernfalls, wenn alles ruhig ist, versuchen Sie den ersten Befehl, der ein Fenster schaffen und er die Variablen zuweisen „gewinnen“.

Sie sollen nun ein kleines Fenster auf dem Bildschirm mit „tk“ in der Titelleiste haben. Lassen Sie uns ein paar Tasten für dieses Fenster erstellen

Sie werden überrascht sein, dass die Tasten nicht im Fenster angezeigt haben. Sie müssen zuerst mit einem des so genannten Geometry-Manager platziert werden. Die beiden häufigsten sind „Pack“ und „Grid“.

Verwenden des Pack Manager

Beachten Sie, dass nach dem ersten Befehl der Schaltfläche im Fenster platziert wird und das Fenster selbst ist auf die Größe der Schaltfläche geschrumpft. Wenn die zweite Taste verpackt wird das Fenster erweitert wird, es zu empfangen. Die Standard-TOP stapelte sie vertikal in der Reihenfolge, wie sie verpackt wurden.

Versuchen Sie nun die folgenden zwei Befehle.

Nun schauen die Tasten wie

In der Praxis wird die Packungsgeometrie Manager in einem dieser zwei Modi zu setzen eine Reihe von Widgets in entweder einer vertikalen oder horizontalen Reihe Spalte verwendet.

Unsere Tasten schauen ein wenig squished. Wir können das Problem beheben, indem sie mit einem kleinen Polster Verpackung. „Padx“ fügt Pixel nach links und rechts und „pady“ fügt sich die oben und unten.

Ich schlage vor, Sie ein paar mehr Tasten erstellen und spielen mit unten und rechts ein gutes Gefühl für das „Pack“ Manager zu erhalten.

Mit Hilfe des Grid-Manager

Eine weitere Möglichkeit, widgets zu platzieren (Knöpfe, Etiketten und so weiter) wird in einer Tabelle oder ein Gitter. Hier ist das übergeordnete Fenster ist unterteilt in Zeilen und Spalten und jedes Widget wird in einer bestimmten Zelle angeordnet. Der Netzmanager verfolgt, wie viele Zeilen und Spalten tatsächlich benötigt werden und dementsprechend das Fenster ausfüllt. Es verfolgt auch, wie weit jede Spalte, und wie groß jede Zeile sein muss, das größte Widget in dieser Zeile oder Spalte zu empfangen. Zeilen müssen nicht alle die gleiche Höhe und Spalten müssen nicht alle gleich breit sein.

Lassen Sie sich ein neues Fenster mit den gleichen Tasten machen, aber diesmal legte sie durch zwei Gitter in einem zwei aus.

Sie können sehen, dass einige leere Raum gelassen wird, da nichts in Zeile 0 gesetzt wurde, Spalte 1 oder in row1, Spalte 0 Lassen Sie uns dies bei einem neuen Widget-Typ aussehen als ein oppurtunity verwenden.

Ein Label-Widget wird verwendet, um Text in das Fenster zu platzieren und ist sehr einfach.

Beachten Sie, wie das Etikett die Breite der Spalte 0 schob den Text aufzunehmen.

Komplexere Layouts.

Zusätzlich gibt zu packen und das Gitter ist ein Ort, ein Widget Verfahren an einer genauen Stelle innerhalb eines Rahmens oder des Fensters zu positionieren. Es wird nicht oft verwendet, weil es ehrlich gesagt einfacher ist, nur die Dinge sich auszubreiten Pack und Gitter lassen je nach Bedarf, vor allem, wenn Sie mit der Maus schrumpfen oder ein Fenster zu erweitern.







Es gibt noch andere Schlüsselwort Argumente, die üblich sind, wenn entweder Packung oder Gitter verwendet wird. Wir sahen padx und pady oben. Mit Gittern gibt es einen „sticky“ Parameter, der eine Karte wie N, E, S, W, NE, usw. koordinieren nimmt Wenn die Gitterzelle größer ist als Ihr Widget ist, weil ein größeres Widget in der gleichen Zeile oder Spalte, klebrig hilft Sie setzen das Widget, wo Sie es in der Zelle wollen.

An dieser Stelle möchten Sie vielleicht Ihre Referenz Leitfaden überprüfen und spielen mit anderen Keyword-Parametern aus der interaktiven Eingabeaufforderung, um ein gutes Gefühl dafür zu bekommen, wie sie funktionieren.

Bringen Sie die Tasten zum Leben.

Wie wir gesehen haben, Widgets sind Objekte und Methoden. Wir haben ihr Rudel und Gitterverfahren im Einsatz. Jetzt werden wir eine neue Methode, „konfiguriert“ verwenden.

plötzlich unser Fenster sieht

Die Tasten sind an Callback-Funktionen gebunden den Parameter „Befehl“ entweder, wenn die Schaltfläche erstellt oder mit configure. Lassen Sie uns durch die Definition einer Funktion starten, die lediglich eine Meldung ausgibt

Wenn wir nun Taste „Uno“ klicken Sie auf die Nachricht gedruckt wird.

Eintrag Widgets

Zur Eingabe von Text vom Benutzer verwenden wir einen Eintrag Widget. Ebenso wie im Fall der Tasten müssen wir einen Weg mit dem Eintrag Widget, in diesem Fall zu kommunizieren Text zu setzen und abzurufen. Dies wird mit einem speziellen Tkinter Objekt erfolgt ein StringVar genannt, die einfach eine Textzeichenfolge hält und ermöglicht es uns, seinen Inhalt zu setzen und lesen (mit get). Lassen Sie sich mit einem sauberen Fenster starten.

Lassen Sie sich jetzt geben: „Das ist ein Test“ in den Eintrag und dann abrufen, es aus unserem verknüpften StringVar Objekt

Wir können auch Text in unser StringVar Objekt festgelegt und haben es in dem Eintrag Widget angezeigt.

Der Listbox-Widget

Unser letztes Widget im Projekt wird uns ein Menü mit Elementen zur Auswahl. Ein List-Box wird mit dem folgenden Befehl erzeugt (nach dem Öffnen eines Fensters). Die „Höhe“ Parameter begrenzt, wie viele Zeilen zeigen.

Der vierte Eintrag zeigt nicht, da das Listenfeld nur 3 Zeilen gesetzt.

Das sieht gut aus, aber wenn Sie die Bildlaufleiste arbeiten werden Sie sehen, dass es noch nicht nichts tut. Die Bildlaufleiste und das Listenfeld müssen umeinander wissen. Dies wird in einer Art und Weise getan ähnlich, wie wir Tasten gebunden Funktionen zurückrufen. Zwei Anrufe benötigt werden, jeweils einen über den anderen zu erzählen.

Nun die Bildlaufleiste manipulieren und das Listenfeld reagieren sehen.

Wenn Sie ein Element im Listenfeld ausgewählt haben, wird das Verfahren curselection es zurückgeben für Sie. Eigentlich gibt es ein Tupel von ausgewählten Elementen. Es ist möglich, das Listenfeld zu konfigurieren, dass mehrere Elemente zu ermöglichen, gemeinsam ausgewählt werden. Ein leeres Tupel wird zurückgegeben, wenn kein Element ausgewählt ist. Ansonsten enthält das Tupel den Index (n) der ausgewählten Elemente. (Aber als Strings!)

Klicken Sie zum Beispiel auf der dritten Position und gehen Sie wie folgt. In typischen Python starten Mode Indizes bei Null.

Dass sie alle zusammen.

Unsere Telefonlisten-Editor nutzt alle der bisher besprochenen Funktionen plus ein paar mehr, dass wir berühren auf werden. Hier ist ein Blick auf die laufende Anwendung.

Python, wie eine gui machen

Jetzt wäre ein guter Zeitpunkt sein, um die Python-Quelle in einem anderen Fenster zu öffnen oder einen Ausdruck machen. Klicken Sie hier, um die Quelle anzuzeigen. Klicken Sie hier, um die anfängliche Telefonliste zu sehen.

Die Variable „Geräteliste“ ist eine Liste von Namen / Telefonnummer Paaren. Da wir mit dem Anwendungspaar Einträgen arbeiten hinzugefügt, geändert und gelöscht werden.

Das erste, was das Programm tut, ist makeWindow nennen, einen Verweis auf sie zurückkehrt, die in den Variablen „gewinnen“ gespeichert ist. Mit Blick auf den Code in der Funktion „makeWindow“ können wir alle Widgets sehen oben gesprochen. Die Widgets werden in drei Rahmen gesetzt, die vertikal anschließend verpackt werden.

Der obere Rahmen ist ein 2x2-Raster für den Namen und die Telefoneingabefelder und Etiketten links von ihnen. Beachten Sie die seltsame Form des Aufrufs

Beachten Sie, dass zwei Globals „nameVar“ und „phoneVar“ Referenz StringVar Objekte, die in den Entry-Widgets „name“ gebunden sind und „Telefon“.

Der zweite Rahmen enthält die Tasten 4 gepackt links nach rechts. Jede ist mit einer Callback-Funktion gebunden, die wir in Kürze besprechen werden. Hier haben wir jede Taste auf eine Variable (wie „b1“) zugeordnet sind, sondern weil wir sie nicht später greifen wir auf das gleiche getan haben könnte, dass wir mit dem Etikett oben taten.

Schließlich wird die Listbox und seine Scrollbar in ihre eigenen frame3 verpackt. Die „Füll“ Parameter guarentee dass der scrollbar und List-Box wird die gleiche Höhe haben und daß das List-Box (fill = BOTH) wird auf die volle Breite des übergeordneten Fensters erweitern.

Sobald das Fenster eingebaut und die Listbox zunächst eine neue Funktion win.mailoop () bevölkert wird aufgerufen. Damit ist das Programm in den ereignisgesteuerten Modus, in dem alles, was geschieht, bis das Programm beendet wird, um Callback-Funktionen beruht, in diesem Programm initiiert, indem Sie die Schaltflächen klicken.

Führen Sie das Programm und klicken Sie auf einen der Namen in der Liste. Klicken Sie dann auf die Schaltfläche Laden. Der Name und die Telefonnummer Ihrer Auswahl sollte in den Entry-Widgets angezeigt. Durch Klicken auf die Schaltfläche Laden aktiviert, um die Funktion LoadEntry Rückrufs, der zuerst den Index der listbox Auswahl zugegriffen wird (über die Funktion whichSelected ()), und dann die Daten aus der Liste „Telefonliste“ abgerufen. Jetzt den Widgets Eintrag ändern Inhalt und klicken Sie auf Aktualisieren oder Hinzufügen. Spielen Sie auch mit der Funktion Löschen.

Eine wenig sorgfältige Untersuchung sollte dieses Programm vollständig verständlich machen. Aber es ist unvollständig ist mehrfacher Hinsicht. Die meisten grell, gibt es keine Möglichkeit, um die Änderungen zu speichern, wenn das Fenster geschlossen ist! Als Übung fügen Sie eine Schaltfläche Speichern und damit es funktioniert. Eine Möglichkeit ist, hat Save Callback ein neuen „phones.py“ schreibt das nächste Mal importieren das Programm ausgeführt wird. Ein weiterer Grund ist die „Gurke“ Modul zu verwenden, um die Inhalte von „Geräteliste“ zwischen den Läufen zu speichern.

In der Folge dieser Studie werden wir dieses Programm erweitern, um eine MySQL-Datenbank zur Speicherung der Telefonliste zu verwenden. Dies wird mehrere Personen ermöglichen, die Liste gleichzeitig zu ändern.







In Verbindung stehende Artikel