Введение
Примеры
Минимальное приложение tkinter
tkinter
представляет собой графический инструментарий , который предоставляет обертку вокруг библиотеки Tk / Tcl GUI и входит в Python. Следующий код создает новое окно с помощью tkinter
и помещает текст в окне тела.
Примечание. В Python 2 заглавные буквы могут немного отличаться, см. Раздел «Примечания» ниже.
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()
Менеджеры по геометрии
Tkinter имеет три механизма для управления геометрией: place
, pack
и grid
.
place
менеджер использует абсолютные координаты пикселя.
pack
менеджер размещает виджеты в один из 4 -х сторон. Новые виджеты размещаются рядом с существующими виджетами.
grid
менеджер размещает виджеты в сетку , похожую на динамически изменения размера таблицы.
Место
Наиболее распространенные ключевые аргументы для widget.place
заключаются в следующем:
x
, абсолютные координаты х виджетаy
, абсолютное у-координаты виджетаheight
, абсолютная высота виджетаwidth
, абсолютная ширина виджета
Пример кода , используя 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()
пак
widget.pack
может принимать следующие именованные аргументы:
expand
, или не заполнять оставленное родителю пространствоfill
, следует ли расширить , чтобы заполнить все пространство (NONE ( по умолчанию), X, Y, или ОБА)side
, сторона паковать против (TOP ( по умолчанию), НИЖНИЙ, ЛЕВЫЙ или ПРАВЫЙ)
сетка
Наиболее часто используемые ключевые слова , аргументы widget.grid
заключаются в следующем:
row
, строка виджета ( по умолчанию наименьшее незанятым)rowspan
, количество colums виджета пролеты ( по умолчанию 1)column
, столбец виджета ( по умолчанию 0)columnspan
, число столбцов виджета пролеты ( по умолчанию 1)sticky
, где поместить виджет , если ячейка сетки больше , чем (комбинация N, NE, E, SE, S, SW, W, NW)
Строки и столбцы проиндексированы нулями. Строки увеличиваются при спуске, а столбцы - при движении вправо.
Пример кода с использованием 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()
Никогда не смешивайте pack
и grid
в том же кадре! Это приведет к тупику приложения!