帧调整大小后,什么可能导致tkinter小部件意外调整大小?

时间:2018-07-10 14:45:26

标签: python tkinter grid resize

可以做到的一件事就是为不存在的列和行分配权重。也许用户认识其他人?

我最近不得不找出这个问题,并将其放在这里,希望对其他人有用。 调整窗口框架的大小后,如果您为不存在的列分配了非零的权重,则tkinter将不会调整窗口小部件的大小。我遇到了这种情况,我有一个动态UI,它隐藏了一个面板,并用一些按钮代替了它。为了正确调整这些按钮的大小,我进行了columnconfigure的配置,并为这些额外的列分配了权重1。恢复UI后,这些按钮被删除,然后我们回到第一列。但是,这些不存在的列的权重仍然会影响调整大小,如附图所示。

after resizing the window frame, we don't want to see the pink

为解决该问题,我将设置为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()   

0 个答案:

没有答案