可以做到的一件事就是为不存在的列和行分配权重。也许用户认识其他人?
我最近不得不找出这个问题,并将其放在这里,希望对其他人有用。 调整窗口框架的大小后,如果您为不存在的列分配了非零的权重,则tkinter将不会调整窗口小部件的大小。我遇到了这种情况,我有一个动态UI,它隐藏了一个面板,并用一些按钮代替了它。为了正确调整这些按钮的大小,我进行了columnconfigure的配置,并为这些额外的列分配了权重1。恢复UI后,这些按钮被删除,然后我们回到第一列。但是,这些不存在的列的权重仍然会影响调整大小,如附图所示。
为解决该问题,我将设置为1的这些额外列的权重重置为零(即使这些列在UI中不再存在)。
说明该问题的最小代码如下所示:
问题行标记为# @@@@@@@ this is a problem
import tkinter as tk
class frame_resize:
def setupGUI(self):
self._root = tk.Tk()
self._font = 'helvetica 16'
self._mainFrame = tk.Frame(self._root, bg='pink')
self._label = tk.Label(self._mainFrame,
font=self._font,
bg='sky blue',
text='this is some text')
self._mainButton = tk.Button(self._mainFrame, text='Press here',
font=self._font)
# give weights so that widgets expand when outer frame expands
tk.Grid.rowconfigure(self._root, 0, weight=1)
tk.Grid.columnconfigure(self._root, 0, weight=1)
tk.Grid.rowconfigure(self._mainFrame, 0, weight=1)
tk.Grid.columnconfigure(self._mainFrame, 0, weight=1)
# @@@@@@@ this is a problem, if we have no column 1
tk.Grid.columnconfigure(self._mainFrame, 1, weight=1)
#pop elemnts into grid
self._mainFrame.grid(column=0, row=0, sticky='nsew')
self._label.grid(column=0, row=0, sticky='nsew')
self._mainButton.grid(column=0, row=1, sticky='nsew')
self._root.mainloop()
fr = frame_resize()
fr.setupGUI()