Python Language
Tkinter
Поиск…
Вступление
Выпущен в Tkinter - это самая популярная библиотека графического интерфейса пользователя (Python). В этом разделе объясняется правильное использование этой библиотеки и ее функций.
замечания
Капитализация модуля tkinter отличается между Python 2 и 3. Для Python 2 используйте следующее:
from Tkinter import * # Capitalized
Для Python 3 используйте следующее:
from tkinter import * # Lowercase
Для кода, который работает с Python 2 и 3, вы можете либо сделать
try:
from Tkinter import *
except ImportError:
from tkinter import *
или же
from sys import version_info
if version_info.major == 2:
from Tkinter import *
elif version_info.major == 3:
from tkinter import *
См. Документацию tkinter для более подробной информации.
Минимальное приложение tkinter
tkinter
- это инструментарий GUI, который предоставляет оболочку вокруг библиотеки GUI Tk / Tcl и входит в состав 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
помещает виджеты в одну из четырех сторон. Новые виджеты размещаются рядом с существующими виджетами.
Менеджер grid
помещает виджеты в сетку, аналогичную динамически изменяющейся электронной таблице.
Место
Наиболее распространенными аргументами ключевого слова для widget.place
являются:
-
x
, абсолютная x-координата виджета -
y
, абсолютная 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 (по умолчанию), BOTTOM, LEFT или RIGHT)
сетка
Наиболее часто используемые аргументы ключевого слова widget.grid
следующие:
-
row
, строка виджета (по умолчанию самая маленькая незанятая) -
rowspan
, количество колонок в виджетах (по умолчанию 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
в одном раме! Это приведет к запуску приложения!