tkinter bzw. GUI

Hier gibt es Informationen zu tkinter und GUI

GUI bedeutet Grafische Benutzeroberfläche oder auch grafische Benutzerschnittstelle (Abk. GUI von englisch graphical user interface) bezeichnet eine Form von Benutzerschnittstelle eines Computers. Sie hat die Aufgabe, Anwendungssoftware auf einem Rechner mittels grafischer Symbole, Steuerelemente oder auch Widgets genannt, bedienbar zu machen.

Grafische Benutzeroberflächen können u. a. folgende GUI-Komponenten haben:

  • Fenster: Eine GUI kann aus einem oder mehreren Fenstern bestehen.
  • Rahmen / Tafel: Rahmen (bzw. Tafeln) dienen als Behälter für andere Komponenten.
  • Schaltfäche (Button): Mit Schaltflächen werden in der Regel Programmaktionen ausgelöst.
  • Schriftfeld (Label): Schriftfelder dienen dazu, Texte auf dem Bildschirm darzustellen.
  • Eingabefeld: In Eingabefelder kann der Benutzer Zeichenketten eingeben.
  • Leinwand (Canvas): Eine Leinwand ist ein Bereich, in dem man z. B. Figuren zeichnen und Bilder anzeigen kann
  • Textfeld: Ein Textfeld ist ein Eingabebereich, in den mehrzeilige Texte geschrieben werden können.

Tkinter ist eine Sprachanbindung für das GUI-Toolkit Tk für die Programmiersprache Python. Der Name steht als Abkürzung für Tk interface. Tkinter war das erste GUI-Toolkit für Python, weshalb es inzwischen auch zum Lieferumfang von Python gehört.

In diesem Kapitel unseres online Python-Tkinter-Tutorials führen wir die Layout-Manager – auch als Geometrie-Manager bekannt – ein. Tkinter besitzt drei verschiedene Layout-Manager:

Die drei Layout-Manager pack, grid und place dürfen nie im gleichen Master-Fenster gemischt werden!

Geometrie-Manager dienen verschiedenen Zwecken. Sie

  • ordnen Widgets auf dem Bildschirm an
  • registrieren Widgets bei dem zugrundeliegenden Fenstermanager
  • managen die Darstellung der Widgets auf dem Bildschirm

Die Anordnung von Widgets auf dem Bildschirm beinhaltet auch die Position und die Größe zu bestimmen. Widgets können aber auch dem Geometrie-Manager Angaben zu Größe und Position geben, aber dies sind gewissermaßen nur Wunschvorstellungen, da der Geometrie-Manager immer „das letzte Wort“ hat, was die Poistionierung und die Größendarstellung betrifft. Pack ist der am einfachsten zu benutzende der drei Geometrie-Manager von Tk und Tkinter. Statt dass man präzise erklären muss, wo ein Widget auf dem Bildschirm erscheinen soll, werden die Widgets relativ zueinander positioniert. Die Details werden von Pack automatisch bestimmt, also genaue Koordinaten, Größen und so weiter. Aber obwohl die pack-Methode einfacher zu benutzen ist, ist dieser Layout-Manager in seinen Möglichkeiten im Vergleich zu der grid- und der place-Methode eingeschränkt. Für einfache Anwendungen ist dieser Manager aber meistens die beste Wahl.

Das Erstellen einer GUI-Anwendung mit Tkinter ist eine einfache Aufgabe. Sie müssen nur die folgenden Schritte ausführen –

Importieren Sie das Tkinter-Modul.
Erstellen Sie das Hauptfenster der GUI-Anwendung.
Fügen Sie der GUI-Anwendung eines oder mehrere Widgets hinzu.
Rufen Sie die Hauptereignisschleife auf, um auf jedes vom Benutzer ausgelöste Ereignis einzugehen.

Um mit der grafischen Oberfläche zu arbeiten muss tkinter importiert werden. Dies geschieht über import tkinter

In Python2 wurde tkinter am Anfang noch groß geschrieben. In Python3 wird es klein geschrieben. Um einen evtl. Fehler zu umgehen besteht die Möglichkeit einen Alias festzulegen. Durch einen try kann der evtl. Fehler abgefangen werden.

try:
import Tkinter as tkinter
except:
import tkinter


Ein ganz einfaches Fenster wird durch tkinter.Tk() erstellt.

import tkinter
Fenster=tkinter.Tk()

Widgets die Übersicht

ButtonDas Button-Widget wird verwendet, um die Schaltflächen in Ihrer Anwendung anzuzeigen.
CanvasMit dem Canvas-Widget können Sie in Ihrer Anwendung Formen wie Linien, Ovale, Polygone und Rechtecke zeichnen.
CheckbuttonDas Checkbutton-Widget wird verwendet, um eine Reihe von Optionen als Kontrollkästchen anzuzeigen. Der Benutzer kann mehrere Optionen gleichzeitig auswählen.
EntryDas Eintrags-Widget wird verwendet, um ein einzeiliges Textfeld zum Akzeptieren von Werten von einem Benutzer anzuzeigen.
FrameDas Frame-Widget wird als Container-Widget zum Organisieren anderer Widgets verwendet.
LabelDas Label-Widget wird verwendet, um eine einzeilige Beschriftung für andere Widgets bereitzustellen. Es kann auch Bilder enthalten.
ListboxDas Listbox-Widget wird verwendet, um einem Benutzer eine Liste von Optionen bereitzustellen.
MenubuttonDas Menübutton-Widget wird verwendet, um Menüs in Ihrer Anwendung anzuzeigen.
MenuDas Menü-Widget wird verwendet, um einem Benutzer verschiedene Befehle bereitzustellen. Diese Befehle sind in Menubutton enthalten.
MessageDas Nachrichten-Widget wird verwendet, um mehrzeilige Textfelder anzuzeigen, um Werte von einem Benutzer zu akzeptieren.
RadiobuttonDas Radiobutton-Widget wird verwendet, um eine Reihe von Optionen als Optionsfelder anzuzeigen. Der Benutzer kann jeweils nur eine Option auswählen.
ScaleDas Skalierungs-Widget wird verwendet, um ein Schieberegler-Widget bereitzustellen.
ScrollbarMit dem Widget für die Bildlaufleiste können Sie verschiedenen Widgets, wie z. B. Listenfeldern, eine Bildlauffunktion hinzufügen.
TextDas Text-Widget wird verwendet, um Text in mehreren Zeilen anzuzeigen.
ToplevelMit dem Toplevel-Widget wird ein separater Fenstercontainer bereitgestellt.
SpinboxDas Spinbox-Widget ist eine Variante des Standard-Widget für Tkinter Entry, mit dem Sie aus einer festen Anzahl von Werten auswählen können.
PanedWindowEin PanedWindow ist ein Container-Widget, das eine beliebige Anzahl von horizontal oder vertikal angeordneten Bereichen enthalten kann.
LabelFrameEin Labelframe ist ein einfaches Container-Widget. Sein Hauptzweck besteht darin, als Abstandhalter oder Container für komplexe Fensterlayouts zu fungieren.
tkMessageBoxDieses Modul dient zur Anzeige von Meldungsfeldern in Ihren Anwendungen.

Ein einfache Messagesbox kann durch messagebox erstellt werden. Die Parameter sind:

Funktionsname – Dies ist der Name der entsprechenden Meldungsfeldfunktion.

title – Dies ist der Text, der in der Titelleiste eines Meldungsfelds angezeigt werden soll.
message – Dies ist der Text, der als Nachricht angezeigt werden soll.

Optionen – Optionen sind alternative Optionen, mit denen Sie ein Standard-Meldungsfeld anpassen können. Einige der Optionen, die Sie verwenden können, sind Standard und übergeordnet. Die Standardoption wird verwendet, um die Standardschaltfläche anzugeben, z. B. ABORT, RETRY oder IGNORE im Meldungsfeld. Die übergeordnete Option wird verwendet, um das Fenster anzugeben, in dem das Meldungsfeld angezeigt werden soll.

Sie können eine der folgenden Funktionen mit der Dialogbox verwenden:

showinfo()
showwarning()
showerror ()
askquestion()
askokcancel()
askyesno ()
askretrycancel ()

Ein weiteres Beispiel:

from tkinter import *
from tkinter import Label
root = Tk()
Label(root, text="Rot", bg="red", fg="white").pack()
Label(root, text="Grün", bg="green", fg="black").pack()
Label(root, text="Blau", bg="blue", fg="white").pack()
mainloop()

Die Angabe von bg und fg definiert die Hintergrund- und Vordergrundfarbe. Das Fenster ist so klein, da packet immer die kleinstmögliche Größe einstellt. Eine genaue Formatierung geht über place

Label

import tkinter
Fenster=tkinter.Tk()
Anzeige = tkinter.Label(Fenster,text="Hallo")
Anzeige.pack()

Die Anzeige muss auf den Bildschirm „gepackt“ werden. Erst wenn .pack() angewandt wird wird das Bild auf dem Bildschirm erscheinen. Der Button wird automatisch auf die erforderliche Größe angepasst.

Button

Erstellung von Button mit tkinter

Einen Button erzeugt man über den gleichnamigen Befehl. Dann werden die Buttons „gepackt“. Es wird eine mainloop (=Endlosschleife) erstellt. Doe Schleife mainloop() sammelt alles an Ereignissen bzw. Events ein, was für das tkinter Fenster und seine Kompnenten von Bedeutung sein könnte. Endlos ist die Schleife insofern, weil sie an keine Bedingung geknüpft ist, sie hört erst auf, wenn das Programm zu Ende ist.

Jetzt kann ein Button mit einer Funktion verbunden werden. Durch command wird die Funktion verbunden.

def button1Click():
print ("Schön, das freut mich")
def button2Click():
print ("Oh - das tut mir leid")
from tkinter import *
Fenster=Tk()
Anzeige=Label (Fenster, text="Hallo, wie geht es Dir?")
Anzeige.pack()
Button1=Button(Fenster, text="Gut", command=button1Click())
Button2=Button(Fenster, text="Schlecht", command=button2Click())
Button1.pack()
Button2.pack()
Fenster.mainloop()

Durch die Methode pack() wird das Fenster in Größe und Anordnung automatisiert dargestellt. Ist es gewünscht die Fenster exakt in Größe und Anordnung zu konfigurieren ist die Methode place() erforderlich.

Dies ist die Anzeige bei Verwendung folgendes Codes:

/usr/bin/python3
import tkinter
from tkinter import filedialog
from tkinter import *
import tkinter.messagebox
def donothing():
print ("Keine Aktion erfolgt")
def file_save():
name=asksaveasfile(mode='w',defaultextension=".txt")
text2save=str(text.get(0.0,END))
name.write(text2save)
name.close
root = Tk()
root.geometry("500x500")
menubar=Menu(root)
root.filename = filedialog.asksaveasfilename(initialdir = "/",title = "Select file",filetypes = (("txt files",".txt"),("all files",".*")))
print (root.filename)
text=Text(root)
text.pack()
filemenu=Menu(menubar,tearoff=0)
filemenu.add_command(label="Neu", command=donothing)
filemenu.add_command(label="Öffnen", command=donothing)
filemenu.add_command(label="Speichern", command=file_save)
filemenu.add_command(label="Speichern als…", command=donothing)
filemenu.add_command(label="Schliessen", command=donothing)
filemenu.add_separator()
filemenu.add_command(label="Beenden", command=root.quit)
menubar.add_cascade(label="Datei", menu=filemenu)
editmenu=Menu(menubar,tearoff=0)
editmenu.add_command(label="Undo", command=donothing)
editmenu.add_command(label="Copy", command=donothing)
editmenu.add_command(label="Paste", command=donothing)
menubar.add_cascade(label="Edit", menu=editmenu)
helpmenu=Menu(menubar,tearoff=0)
helpmenu.add_command(label="Hilfe",command=donothing)
menubar.add_cascade(label="Hilfe",menu=helpmenu)
root.config(menu=menubar)
vokabel=["red","rot"]
Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title('Vokabeltraining')
tkFenster.geometry('300x220')
Menu erstellen
menubar = Menu(tkFenster)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Speichern", command=save)
Rahmen für die Überschrift
frameUeberschrift = Frame(master=tkFenster,
background='#889E9D')
frameUeberschrift.place(x=5, y=5, width=290, height=45)
Rahmen für die Eingaben
frameEingaben = Frame(master=tkFenster,
background='#D5E88F')
frameEingaben.place(x=5, y=45, width=290, height=100)
Rahmen für die Ausgaben
frameAusgaben = Frame(master=tkFenster,
background='#FFCFC9')
frameAusgaben.place(x=5, y=145, width=290, height=101)
labelUeberschrift = Label(master=frameUeberschrift,
background='white',
text='Vokabeltraining')
labelUeberschrift.place(x=50, y=12, width=190, height=20)
Label mit Aufschrift Wort
labelGeschwindigkeit = Label(master=frameEingaben,
background='white',
text='Wort in Englisch')
labelGeschwindigkeit.place(x=50, y=10, width=175, height=20)
Aktivierung des Fensters
tkFenster.mainloop()