Поиск…


Вступление

Выпущен в 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 в одном раме! Это приведет к запуску приложения!



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow