Sök…


Introduktion

Släppt i Tkinter är Pythons mest populära GUI (Graphical User Interface) -bibliotek. Detta ämne förklarar korrekt användning av detta bibliotek och dess funktioner.

Anmärkningar

Kapitaliseringen av tkinter-modulen skiljer sig mellan Python 2 och 3. För Python 2 använd följande:

from Tkinter import *  # Capitalized

För Python 3 använd följande:

from tkinter import *  # Lowercase

För kod som fungerar med både Python 2 och 3 kan du göra det

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

eller

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

Mer information finns i tkinterdokumentationen

En minimal tkinterapplikation

tkinter är ett verktygssats för GUI som tillhandahåller ett omslag runt Tk / Tcl GUI-biblioteket och ingår i Python. Följande kod skapar ett nytt fönster med tkinter och placerar lite text i fönsterkroppen.

Anmärkning: I Python 2 kan bokstäverna vara något annorlunda, se kommentarer avsnitt nedan.

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

Geometri-chefer

Tkinter har tre mekanismer för geometrihantering: place , pack och grid .

Den place manager använder absoluta pixelkoordinater.

pack placerar widgets på en av fyra sidor. Nya widgetar placeras bredvid befintliga widgetar.

grid placerar widgetar i ett rutnät som liknar ett dynamiskt ändra storlek på kalkylbladet.

Plats

De vanligaste widget.place för widget.place är följande:

  • x , widgetens absoluta x-koordinat
  • y , widgetens absoluta y-koordinat
  • height , widgetens absoluta höjd
  • width , widgetens absoluta bredd

Ett kodexempel med 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()

Packa

widget.pack kan ta följande sökordargument:

  • expand , om du vill fylla utrymme kvar av förälder eller inte
  • fill , om du vill expandera för att fylla utrymme (INGEN (standard), X, Y eller BÅDE)
  • side , sidan att packa mot (TOPP (standard), BOTTOM, Vänster eller HÖGER)

Rutnät

De vanligaste widget.grid för widget.grid är följande:

  • row , raden på widgeten (standard minsta ledig)
  • rowspan , antalet kolum som en widget spänner över (standard 1)
  • column , widgetens kolumn (standard 0)
  • columnspan , antalet kolumner som en widget spänner över (standard 1)
  • sticky , var ska widgeten placeras om rutnätscellen är större än den (kombination av N, NE, E, SE, S, SW, W, NW)

Raderna och kolumnerna är nollindexerade. Raderna ökar att gå ner och kolumnerna ökar att gå rätt.

Ett kodexempel med 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()

Blanda aldrig pack och grid inom samma ram! Om du gör det kommer det att leda till applikationsdödlås!



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow