Zoeken…


Invoering

Uitgegeven in Tkinter is de populairste GUI-bibliotheek (Graphical User Interface) van Python. In dit onderwerp wordt het juiste gebruik van deze bibliotheek en de functies ervan uitgelegd.

Opmerkingen

Het hoofdlettergebruik van de tkinter-module verschilt tussen Python 2 en 3. Gebruik voor Python 2 het volgende:

from Tkinter import *  # Capitalized

Gebruik voor Python 3 het volgende:

from tkinter import *  # Lowercase

Voor code die met zowel Python 2 als 3 werkt, kunt u beide doen

try:
    from Tkinter import *
except ImportError:
    from tkinter import *

of

from sys import version_info
if version_info.major == 2:
    from Tkinter import *
elif version_info.major == 3:
    from tkinter import *

Zie de tkinter-documentatie voor meer informatie

Een minimale tkinter-applicatie

tkinter is een GUI-toolkit die een wrapper rond de GUI-bibliotheek van Tk / Tcl biedt en wordt meegeleverd met Python. De volgende code maakt een nieuw venster met behulp van tkinter en plaatst wat tekst in de hoofdtekst van het venster.

Opmerking: In Python 2 kan het hoofdlettergebruik enigszins verschillen, zie het gedeelte Opmerkingen hieronder.

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()

Meetkundemanagers

Tkinter heeft drie mechanismen voor geometriebeheer: place , pack en grid .

De place gebruikt absolute pixelcoördinaten.

De pack plaatst widgets in een van de 4 zijden. Nieuwe widgets worden naast bestaande widgets geplaatst.

De grid plaatst widgets in een raster dat lijkt op een spreadsheet met dynamisch formaat.

Plaats

De meest voorkomende trefwoordargumenten voor widget.place zijn de volgende:

  • x , de absolute x-coördinaat van de widget
  • y , de absolute y-coördinaat van de widget
  • height , de absolute hoogte van de widget
  • width , de absolute breedte van de widget

Een codevoorbeeld met behulp van 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()

pak

widget.pack kan de volgende trefwoordargumenten aannemen:

  • expand , al dan niet om de door de ouder achtergelaten ruimte te vullen
  • fill , of moet worden uitgebreid om alle ruimte te vullen (GEEN (standaard), X, Y of BEIDE)
  • side , de zijde om tegen in te pakken (TOP (standaard), BOTTOM, LEFT of RIGHT)

rooster

De meest gebruikte trefwoordargumenten van widget.grid zijn als volgt:

  • row , de rij van de widget (standaard kleinste onbezet)
  • rowspan , het aantal kolommen dat een widget overspant (standaard 1)
  • column , de kolom van de widget (standaard 0)
  • columnspan , het aantal kolommen dat een widget overspant (standaard 1)
  • sticky , waar widget te plaatsen als de rastercel groter is dan deze (combinatie van N, NE, E, SE, S, SW, W, NW)

De rijen en kolommen zijn nul geïndexeerd. Rijen gaan naar beneden en kolommen gaan naar rechts.

Een codevoorbeeld met behulp van 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()

Meng pack en grid nooit binnen hetzelfde frame! Als u dit doet, loopt de toepassing vast!



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow