Tkinter画布没有正确调整大小

时间:2014-03-11 05:41:11

标签: user-interface python-3.x tkinter

我正在尝试创建一个游戏板,可以在用户调整窗口大小时自动调整大小。我决定使用多个画布(计划将它们存储在字典中)而不是在单个画布上绘制矩形,因为我认为它会更容易和更好看。但是,我似乎无法正确调整电路板的大小。以下是功能:

def __init__(self):
    self._root_window = tkinter.Tk()
    self._cols = 4
    self._rows = 4

    for row in range(self._rows):
        for col in range(self._cols):
            self._canvas = tkinter.Canvas(
                master = self._root_window, width = 50, height = 50, borderwidth = 0,
                highlightthickness = .5, background = '#C49B52',
                highlightbackground = 'black')

            self._canvas.grid(
                row = row, column = col, padx = 0, pady = 0,
                sticky = tkinter.N + tkinter.E + tkinter.S + tkinter.W)

            self._root_window.rowconfigure(0, weight = 1)
            self._root_window.columnconfigure(0, weight = 1)

def start(self) -> None:
    self._root_window.mainloop()

当我尝试调整窗口大小时会发生这种情况:

http://vvcap.net/db/ZU7nvbjtGoDKpIyRXjVs.htp

我尝试使用self._root_window.bind('<Configure>', self._resize)并通过它重新打印电路板,但这是结果(当我尝试拉伸它时它也崩溃了):

http://vvcap.net/db/HqWzkb9_rVYfckPIuiRR.htp

如何正确调整电路板的大小?

1 个答案:

答案 0 :(得分:0)

您需要为每行和每列提供 weight ,其中描述了该行或列在容器增长或缩小时如何增长或缩小。默认情况下,每行和每列的权重为0(零)。在这种情况下,tkinter将选择堆叠顺序中最高的窗口小部件来增大或缩小,这就是左上角小部件增长的原因。其余的行和列只能扩展到足以容纳左上角的画布。

在big for循环之后将以下代码添加到代码中:

for row in range(self._rows):
    for col in range(self._cols):
        ...
for row in range(self._rows):
    self._root_window.grid_rowconfigure(row, weight=1)
for col in range(self._cols):
    self._root_window.grid_columnconfigure(col, weight=1)