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