Как установить окно Tkinter с постоянным размером

Jinku Hu 25 Июнь 2020 18 Апрель 2020
Как установить окно Tkinter с постоянным размером

Размер окна Tkinter по умолчанию может быть изменен, даже если вы задаете ширину и высоту при инициализации экземпляра окна.

import tkinter as tk

app = tk.Tk()

app.geometry('200x200')

app.mainloop()

Вы можете перетащить окно, созданное по приведенным выше кодам, чтобы получить различные размеры окон. Функция resizable должна быть использована для ограничения размеров ширины и высоты.

import tkinter as tk

app = tk.Tk()

app.geometry('200x200')
app.resizable(width=0, height=0)

app.mainloop()

app.resizable(width=0, height=0) не позволяет изменять размер как ширину, так и высоту.

Установите фрейм Tkinter с постоянным размером

Рамка внутри окна немного похожа на окно, в том смысле, что она автоматически изменяет размер, даже если вы определяете ширину и высоту этой рамки.

import tkinter as tk

app = tk.Tk()

app.geometry('200x200')
app.resizable(0, 0)

backFrame = tk.Frame(master=app,
                    width=200,
                    height=200,
                    bg='blue').pack()

button1 = tk.Button(master=backFrame, 
                    text='Button 1', 
                    bg='blue', 
                    fg='red').pack()
button2 = tk.Button(master=backFrame, 
                    text='Button 2', 
                    bg='blue', 
                    fg='green').pack()
button3 = tk.Label(master=backFrame, 
                   text='Button 3', 
                   bg='red',
                   fg='blue').pack()

app.mainloop()

Графический интерфейс, который мы ожидали, похож на приведенный ниже,

Каркас кинтера не подлежит изменению

Но что мы получаем после выполнения вышеуказанных кодов, так это то,

Рамка Tkinter Resizable

Фрейм backFrame автоматически изменяет размер, чтобы подогнать под прикрепленные к нему виджеты. Другими словами, виджеты внутри backFrame контролируют размер своего родительского кадра.

Вы можете отключить изменение размера фрейма к его виджетам, установив pack_propagate(0).

Правильный код для замораживания размера кадра,

import tkinter as tk

app = tk.Tk()

app.geometry('200x200')
app.resizable(0, 0)

backFrame = tk.Frame(master=app,
                    width=200,
                    height=200,
                    bg='blue')
backFrame.pack()
backFrame.propagate(0)

button1 = tk.Button(master=backFrame, 
                    text='Button 1', 
                    bg='blue', 
                    fg='red').pack()
button2 = tk.Button(master=backFrame, 
                    text='Button 2', 
                    bg='blue', 
                    fg='green').pack()
button3 = tk.Label(master=backFrame, 
                   text='Button 3', 
                   bg='red',
                   fg='blue').pack()

app.mainloop()
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

Сопутствующая статья - Tkinter Geometry