如何创建具有固定大小的 Tkinter 窗口

Jinku Hu 2022年3月21日 2019年12月2日
如何创建具有固定大小的 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) 设置宽度和高度都不能调整。

将框架设置为固定大小

窗口内部的框架与窗口有点类似,即使定义了框架的宽度和高度,它也会自动调整自身大小。

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()

我们期望的 GUI 如下所示,

Tkinter 框架无法调整大小

但是执行上面的代码后我们得到的是

Tkinter 框架可调整大小

框架 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