【发布时间】:2016-06-16 23:30:26
【问题描述】:
我有这个 GUI 程序,其中一个框架中有一个 OptionMenu。每当我在 OptionMenu 中选择某些内容时,它都会调整父框架的大小,即使它有足够的空间容纳当前面板。这很难用语言来描述,所以这里是我的意思的图像:
可以看到,随着 OptionMenu 尺寸的增加,紫色、蓝色和红色的边框都扩大了。
窗口分为左右两个Frame,采用Grid Layout,权重分别为3和2。两个框架里面是每个彩色面板的Pack布局,设置为填充X。在Purple里面,我设置了这个optionMenu,并把它打包到面板的左边。
当它改变其内容时,它会调整整个右框架的大小,忽略网格权重并破坏 GUI 的平衡。如果我为 OptionMenu 设置了固定宽度,它不会调整大小,但仍会使框架与 GridLayout 不对齐。我怎样才能让框架不根据这个元素的宽度调整大小,而只需将元素放在框架内,即使在最宽的地方,它也有足够的空间来处理它?
这是我正在使用的 GUI 代码的简化版本,完整的代码有点太长了,因为每个面板都被分解成类以供将来使用:
root = Tk()
root.geometry('640x480')
#Begin defining left frame areas
leftFrame = Frame(root)
grayPanel = Frame(leftFrame,bg="gray")
whitePanel = Frame(leftFrame,bg="white", height=50)
grayPanel.pack(expand=True,fill=BOTH)
whitePanel.pack(fill=X)
#Begin defining right frame areas
rightFrame = Frame(root)
purplePanel = Frame(rightFrame,bg="purple", height=50)
bluePanel = Frame(rightFrame,bg="blue")
redPanel = Frame(rightFrame,bg="red", height=100)
purplePanel.pack(fill=X)
bluePanel.pack(expand=True,fill=BOTH)
redPanel.pack(fill=X)
#create the options dropdown for purple
currentOption = StringVar(purplePanel)
currentOption.set("None")
optList = ["None","Some incredibly long string that breaks everything"]
options = OptionMenu(purplePanel,currentOption,*optList)
options.pack(side=LEFT)
leftFrame.grid(row=0,column=0,sticky=N+S+E+W)
rightFrame.grid(row=0,column=1,sticky=N+S+E+W)
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=3)
root.grid_columnconfigure(1, weight=2)
root.mainloop()
【问题讨论】:
标签: python tkinter grid-layout optionmenu