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!



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow