Python Language
Tkinter
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!