在Tkinter中调整一个小部件在另一个小部件内的大小

0 投票
1 回答
1000 浏览
提问于 2025-04-18 12:50

我正在开发一个用于莫斯堡光谱的模拟软件(化学方面的),但是在设计用户界面时,遇到了一个问题,就是在调整父窗口的大小时,子窗口的大小没有跟着变化。父窗口在窗口最大化时会填满额外的空间,但子窗口的大小却不变。

from Tkinter import *
import ttk
import tkFileDialog as FileDialog
from PIL import Image, ImageTk
import tkFont
import matplotlib
from numpy import sin, pi

root = Tk()
# Main Container
content = ttk.Frame(root)
bold = tkFont.Font(family='Helvetica', weight='bold')
LeftFrame = ttk.Frame(content, borderwidth=5, relief="groove", width=200)
RightFrame = ttk.Frame(content, borderwidth=5, relief="groove", width=750)
text = Text(LeftFrame, height=40, width=30, padx=5, pady=5)

..... Some Codes .....

# Geometry
LeftFrame.grid(column=0, row=1, rowspan=2, sticky=(N, S, E, W))
RightFrame.grid(column=1, row=1, columnspan=3, rowspan=2, sticky=(N, S, E, W))
namelbl.grid(column=0, row=1, sticky=(N, S, E, W), padx=5)
text.grid(column=0, row=2, sticky=(N, S, E, W))

root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
content.columnconfigure(0, weight=1)
content.columnconfigure(1, weight=3)
content.columnconfigure(2, weight=3)
content.columnconfigure(3, weight=3)
content.rowconfigure(1, weight=1)

root.state("zoomed")

root.mainloop()

所以,我想问的是,怎么才能让text这个子窗口的大小和LeftFrame这个父窗口的大小保持一致?在我的情况中,只有LeftFrame在扩展,而text的大小却保持不变。

软件截图

1 个回答

2

你没有给框架里面的小部件设置 sticky 选项,这样就导致这些小部件不能填满它们被分配的区域。此外,你也没有给内部框架的行和列设置权重。

每次使用网格布局时,都应该为父部件的行和列指定权重。如果你在框架里面再放框架,每个框架都是独立的,需要分别配置它们的行和列。

撰写回答