python - 添加项目后如何保持Tkinter帧大小不变
问题描述
我想将一条线均匀地分成多个区域并在其中放置项目,但遇到了一些问题。如果我运行下面的代码,该区域被平均分为三个部分。
from tkinter import *
tk = Tk()
command_area = Frame(tk, pady=10)
command_area.pack(side=TOP)
width = 300
info_area = Frame(command_area, bg='blue', height=50, width=width)
info_area.pack(side=LEFT)
button_area = Frame(command_area, bg='yellow', height=50, width=width)
button_area.pack(side=LEFT)
time_area = Frame(command_area, bg='green', height=50, width=width)
time_area.pack(side=LEFT)
tk.mainloop()
但是,如果我将一些项目添加到任何这些框架中,框架的宽度将会改变。例如,如果我添加
bomb_label = Label(info_area, text='A sentence')
bomb_label.pack()
在“tk.mainloop()”之前,第一个区域被缩短。在向它们添加项目后,如何使这些框架的大小保持不变?谢谢。
解决方案
我能想到至少三种方法来实现你的目标。每种方法都有优点和缺点。由于您的问题有些模糊,因此很难说哪种方法最好。
但是,我认为这grid
是最好的选择。它允许您指定行和/或列必须具有统一的大小。再加上赋予所有列相同的权重,将产生您想要的结果。
要创建统一宽度的列,您需要使用该uniform
选项,并为每一列赋予相同的值。该值无关紧要,因为具有相同值的所有列将被强制为相同大小。
在下面的示例中,我还为每一列赋予了相同的非零值weight
,这将允许任何额外的空间在列之间平均分配。如果用户调整窗口大小,这会让列增长。
command_area.pack(side=TOP, fill="x")
command_area.grid_columnconfigure((0,1,2), uniform="1", weight=1)
info_area.grid(row=0, column=0, sticky="ew")
button_area.grid(row=0, column=1, sticky="ew")
time_area.grid(row=0, column=2, sticky="ew")
推荐阅读
- javascript - 如果页面 a 是打开的,是否有一种简单的方法来编写 closePage x,y,z?手风琴菜单
- passwords - 带DE2板的VHDL密码程序
- c++ - 为什么这个 do-while-loop 每隔一个循环就写入数组?
- java - Java:选择排序逻辑
- javascript - 创建“银行交易”并应用特定规则
- c++ - 无法指出发生分段错误的位置
- javascript - 如何在嵌套的 JSON 字符串中循环和提取 newsid、标题的值
- python - 找到数组和另一个变量的最大值的最快方法是什么?
- python - 正则表达式从文本文件中提取文本块?
- javascript - 动态改变