Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 框架调整后,什么会导致tkinter小部件意外调整大小?_Python_Tkinter_Grid_Resize - Fatal编程技术网

Python 框架调整后,什么会导致tkinter小部件意外调整大小?

Python 框架调整后,什么会导致tkinter小部件意外调整大小?,python,tkinter,grid,resize,Python,Tkinter,Grid,Resize,可以做的一件事是为不存在的列和行分配权重。也许用户知道其他人 我最近不得不追踪这个问题,并把它放在这里,希望它对其他人有用。 调整窗口框架大小后,如果为不存在的列指定了非零权重,tkinter将不会调整窗口小部件的大小。我遇到了这样的情况,我有一个隐藏面板的动态用户界面,并用一些按钮替换它。为了使这些按钮能够正确调整大小,我进行了一次列配置,并为这些额外的列指定了权重1。当UI恢复时,这些按钮被删除,我们返回到一列。然而,如附图所示,这些不存在的列的权重仍然影响调整大小 为了解决这个问题,我将

可以做的一件事是为不存在的列和行分配权重。也许用户知道其他人

我最近不得不追踪这个问题,并把它放在这里,希望它对其他人有用。 调整窗口框架大小后,如果为不存在的列指定了非零权重,tkinter将不会调整窗口小部件的大小。我遇到了这样的情况,我有一个隐藏面板的动态用户界面,并用一些按钮替换它。为了使这些按钮能够正确调整大小,我进行了一次列配置,并为这些额外的列指定了权重1。当UI恢复时,这些按钮被删除,我们返回到一列。然而,如附图所示,这些不存在的列的权重仍然影响调整大小

为了解决这个问题,我将设置为1的这些额外列的权重重置为零(即使这些列不再存在于UI中)

下面显示了说明该问题的最少代码:

问题行的标签为
#@@@@@这是一个问题

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()   

“调整窗口框架大小后,如果您为不存在的列分配了非零权重,tkinter将无法调整窗口小部件的大小。”-这不是真的。在这种情况下,Tkinter并没有失败,它只是没有达到您可能期望的效果。但是,它的行为与文档中的行为完全相同。请以问题的形式格式化,然后将解决方案作为答案发布。问题部分用于提问,这不是问题。感谢您的评论。你有没有建议如何以问题的形式更好地表达这个问题?我认为tkinter在这种情况下的行为是违反直觉的。为什么要给不存在的列赋予权重?我认为一个更明智的行为是检查哪些行或列中有小部件,并且只为这些行/列分配权重。“为什么要给不存在的列分配权重?”-有几个原因。例如,如果为第0行和第2行以及第0列和第2列赋予权重,并在第1行和第1列中放置某个对象,则该对象将居中,因为所有额外的空间都是沿边平均分配的。另一个原因是将所有额外空间分配给一个小部件或一组小部件的一侧或另一侧,或者在小部件之间增加间距。这是一种非常普通的技术。好的,谢谢你。我没有遇到过这种技巧。我已经编辑了我的问题,删除了fail这个词。