我正在尝试创建一个游戏板,可以自动调整大小,因为用户调整窗口的大小。我决定使用多个画布(计划将它们存储在字典中),而不是在单个画布上绘制矩形,因为我认为它会更容易和更好看。然而,我似乎不能正确地调整板的大小。下面是函数:
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)
并通过该重新打印板,但这是结果(当我尝试拉伸它时它也崩溃了):
我怎样才能正确调整板的大小?
您需要给每一行和每一列一个权重,它描述了当它的容器增长或收缩时该行或列将如何增长或收缩。默认情况下,每行和列的权重为0(零)。在这种情况下,tkinter将选择堆叠顺序中最高的小部件来增长或缩小,这就是左上角小部件增长的原因。其余的行和列只扩展到足以容纳左上角的画布。
在大的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)