Python Language
tkinter
Suche…
Einführung
In Tkinter veröffentlicht ist die populärste GUI-Bibliothek (Graphical User Interface) von Python. In diesem Thema wird die ordnungsgemäße Verwendung dieser Bibliothek und ihrer Funktionen erläutert.
Bemerkungen
Die Großschreibung des Tkinter-Moduls unterscheidet sich zwischen Python 2 und 3. Für Python 2 verwenden Sie Folgendes:
from Tkinter import * # Capitalized
Für Python 3 verwenden Sie Folgendes:
from tkinter import * # Lowercase
Für Code, der mit Python 2 und 3 funktioniert, können Sie dies tun
try:
from Tkinter import *
except ImportError:
from tkinter import *
oder
from sys import version_info
if version_info.major == 2:
from Tkinter import *
elif version_info.major == 3:
from tkinter import *
Weitere Informationen finden Sie in der tkinter-Dokumentation
Eine minimale Tkinter-Anwendung
tkinter
ist ein GUI-Toolkit, das einen Wrapper um die Tk / Tcl-GUI-Bibliothek bereitstellt und in Python enthalten ist. Mit dem folgenden Code wird ein neues Fenster mit tkinter
und Text in den Fensterkörper tkinter
.
Anmerkung: In Python 2 kann die Großschreibung etwas abweichen, siehe Abschnitt "Anmerkungen".
import tkinter as tk
# GUI window is a subclass of the basic tkinter Frame object
class HelloWorldFrame(tk.Frame):
def __init__(self, master):
# Call superclass constructor
tk.Frame.__init__(self, master)
# Place frame into main window
self.grid()
# Create text box with "Hello World" text
hello = tk.Label(self, text="Hello World! This label can hold strings!")
# Place text box into frame
hello.grid(row=0, column=0)
# Spawn window
if __name__ == "__main__":
# Create main window object
root = tk.Tk()
# Set title of window
root.title("Hello World!")
# Instantiate HelloWorldFrame object
hello_frame = HelloWorldFrame(root)
# Start GUI
hello_frame.mainloop()
Geometrie-Manager
Tkinter verfügt über drei Mechanismen für das Geometriemanagement: place
, pack
und grid
.
Der place
Manager verwendet absolute Pixelkoordinaten.
Der pack
platziert Widgets auf einer von vier Seiten. Neue Widgets werden neben vorhandenen Widgets platziert.
Der grid
Manager platziert Widgets in einem Raster, das einer Tabelle mit dynamischer Größenänderung ähnelt.
Platz
Die häufigsten Schlüsselwortargumente für widget.place
lauten wie folgt:
-
x
, die absolute x-Koordinate des Widgets -
y
, die absolute y-Koordinate des Widgets -
height
, die absolute Höhe des Widgets -
width
, die absolute Breite des Widgets
Ein Codebeispiel mit place
:
class PlaceExample(Frame):
def __init__(self,master):
Frame.__init__(self,master)
self.grid()
top_text=Label(master,text="This is on top at the origin")
#top_text.pack()
top_text.place(x=0,y=0,height=50,width=200)
bottom_right_text=Label(master,text="This is at position 200,400")
#top_text.pack()
bottom_right_text.place(x=200,y=400,height=50,width=200)
# Spawn Window
if __name__=="__main__":
root=Tk()
place_frame=PlaceExample(root)
place_frame.mainloop()
Pack
widget.pack
kann die folgenden Schlüsselwortargumente widget.pack
:
-
expand
, ob der von Eltern hinterlassene Platz gefüllt werden soll oder nicht -
fill
, ob erweitert werden soll, um den gesamten Bereich zu füllen (NONE (Standard), X, Y oder BEIDE) -
side
, die Seite, gegen die gepackt werden soll (TOP (Standard), UNTEN, LINKS oder RECHTS)
Gitter
Die am häufigsten verwendeten Schlüsselwortargumente von widget.grid
lauten wie folgt:
-
row
, die Zeile des Widgets (standardmäßig kleinste unbesetzte) -
rowspan
, die Anzahl der Spalten eines Widgets (Standardeinstellung 1) -
column
, die Spalte des Widget (Standardwert 0) -
columnspan
, die Anzahl der Spalten eines Widgets (Standard 1) -
sticky
, wo das Widget platziert werden soll, wenn die Gitterzelle größer ist (Kombination aus N, NE, E, SE, S, SW, W, NW)
Die Zeilen und Spalten sind nullindiziert. Zeilen steigen nach unten und Spalten nach rechts.
Ein Codebeispiel mit grid
:
from tkinter import *
class GridExample(Frame):
def __init__(self,master):
Frame.__init__(self,master)
self.grid()
top_text=Label(self,text="This text appears on top left")
top_text.grid() # Default position 0, 0
bottom_text=Label(self,text="This text appears on bottom left")
bottom_text.grid() # Default position 1, 0
right_text=Label(self,text="This text appears on the right and spans both rows",
wraplength=100)
# Position is 0,1
# Rowspan means actual position is [0-1],1
right_text.grid(row=0,column=1,rowspan=2)
# Spawn Window
if __name__=="__main__":
root=Tk()
grid_frame=GridExample(root)
grid_frame.mainloop()
Mischen Sie niemals pack
und grid
innerhalb eines Rahmens! Dies führt zu einem Deadlock der Anwendung!