如何解决体重​​/小部件增长不平衡?

时间:2016-11-29 22:45:36

标签: python-3.x tkinter

在多个代码中多次发生这个问题,而我没有找到修复它的方法。第0列第0行的小部件正在增长,其放置方式与其他小部件不同。当我抓住窗口的末端以扩展它并使其增长时,它与其他小部件之间的间隙会增加。

我已经为您提供了一张图片,看看会发生什么:

Dice 1 widget seperated from other widets

这是显示问题的代码:

from tkinter import *
from tkinter import ttk
root=Tk()

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

#Grows the items in the gui
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=1)
root.grid_rowconfigure(1, weight=1)


ttk.Label(mainframe, text="Dice 1:").grid(column=0, row=0, sticky=(W, E))
ttk.Label(mainframe, text="Dice 2:").grid(column=0, row=1, sticky=(W, E))
ttk.Label(mainframe, text="Total:").grid(column=0, row=2, sticky=(W, E))

root.mainloop()

问题似乎来自这个声明:

mainframe.grid(column=1, row=1, sticky=(N, W, E, S))

或来自此声明

root.grid_rowconfigure(0, weight=1)

2 个答案:

答案 0 :(得分:1)

第一个窗口小部件的行为有所不同,因为您以不同方式配置了第一行mainframe。如果您希望所有行的行为方式相同,则以相同的方式配置它们。删除此

mainframe.rowconfigure(0, weight=1)

或添加此

mainframe.rowconfigure(1, weight=1)
mainframe.rowconfigure(2, weight=1)

答案 1 :(得分:1)

最简单的解决方案是删除weight中第0行(零)的mainframe属性,然后将权重赋给第3行。原因是,您不需要任何额外的垂直空间被分配给标签,而正weight属性会将一些额外空间赋予该行或列。

通过在标签后为空行提供正权重,所有空的垂直空间将显示在标签下方。

mainframe = Frame(root, background="pink")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(3, weight=1)

很难说这是否是您问题的实际正确解决方案,因为这取决于您希望mainframe本身的行为方式。它应该缩小以适应标签吗?它应该成长为适合主窗口吗?