Python Language
tkinter
Szukaj…
Wprowadzenie
Wydana w Tkinter jest najpopularniejsza biblioteka graficznego interfejsu użytkownika w języku Python. W tym temacie wyjaśniono prawidłowe wykorzystanie tej biblioteki i jej funkcji.
Uwagi
Wielkość liter w module tkinter różni się w Python 2 i 3. W przypadku Python 2 użyj następujących poleceń:
from Tkinter import * # Capitalized
W przypadku Python 3 użyj następujących poleceń:
from tkinter import * # Lowercase
W przypadku kodu, który działa zarówno z Pythonem 2, jak i 3, możesz to zrobić
try:
from Tkinter import *
except ImportError:
from tkinter import *
lub
from sys import version_info
if version_info.major == 2:
from Tkinter import *
elif version_info.major == 3:
from tkinter import *
Aby uzyskać więcej informacji, zobacz dokumentację tkinter
Minimalna aplikacja tkinter
tkinter
to zestaw narzędzi GUI, który zapewnia opakowanie wokół biblioteki GUI Tk / Tcl i jest dołączony do Pythona. Poniższy kod tworzy nowe okno za pomocą tkinter
i umieszcza tekst w treści okna.
Uwaga: W Pythonie 2 wielkość liter może się nieco różnić, patrz sekcja Uwagi poniżej.
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()
Menedżerowie geometrii
Tkinter ma trzy mechanizmy zarządzania geometrią: place
, pack
i grid
.
place
menedżer wykorzystuje bezwzględne współrzędne piksela.
Menedżer pack
umieszcza widżety na jednej z 4 stron. Nowe widżety są umieszczane obok istniejących widżetów.
Menedżer grid
umieszcza widżety w siatce podobnej do dynamicznie zmieniającego się arkusza kalkulacyjnego.
Miejsce
Najczęstsze argumenty słów kluczowych dla widget.place
są następujące:
-
x
, bezwzględna współrzędna x widżetu -
y
, bezwzględna współrzędna y widżetu -
height
, bezwzględna wysokość widżetu -
width
, bezwzględna szerokość widżetu
Przykład kodu z użyciem 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()
Pakiet
widget.pack
może przyjmować następujące argumenty słów kluczowych:
-
expand
, czy wypełnić przestrzeń pozostawioną przez rodzica -
fill
, czy rozwinąć, aby wypełnić całą spację (BRAK (domyślnie), X, Y lub OBA) -
side
, strona do spakowania (TOP (domyślnie), DOLNY, LEWY lub PRAWY)
Krata
Najczęściej używane argumenty słów kluczowych widget.grid
są następujące:
-
row
, wiersz widżetu (domyślnie najmniejszy niezajęty) -
rowspan
, liczba kolumn widżetu (domyślnie 1) -
column
, kolumna widżetu (domyślnie 0) -
columnspan
, liczba kolumn obejmujących widżet (domyślnie 1) -
sticky
, gdzie umieścić widżet, jeśli komórka siatki jest większa od niego (kombinacja N, NE, E, SE, S, SW, W, NW)
Wiersze i kolumny są indeksowane zerowo. Rzędy rosną w dół, a kolumny rosną w prawo.
Przykład kodu z użyciem 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()
Nigdy nie mieszaj pack
i grid
w tej samej ramce! Może to doprowadzić do impasu aplikacji!