自动调整 tkinter 窗口的大小以适合所有小部件

E. *_*gel 7 python tkinter

我想对主 tkinter 窗口进行动态调整大小,这样当您添加新小部件时,您就不必更改窗口的大小。相反,主窗口将考虑该窗口小部件的大小并自动增加其高度/宽度以适应窗口中的该窗口小部件。

        masterWindow = Tk()

        #Main Window min width
        self.window_width = screen_width * .01
        self.window_height = screen_height * .04

        #Window startst in center of screen
        self.window_start_x = (screen_width/2)
        self.window_start_y = (screen_height/2)
        masterWindow.geometry("%dx%d+%d+%d" % (self.window_width, self.window_height, self.window_start_x, self.window_start_y))
        self.buttonsFrame.pack(side = TOP)
        button_width = 13
        button_height = 2

        #A simple dict that stores script name strings
        for script in SCRIPTS.keys():
            #Remove script extension
            script_name = script.split(".")[0]
            button_width = 13
            button_height = 2
            BUTTONS[script] = Button(self.buttonsFrame, text = script, width = button_width, height = button_height, justify = LEFT, wraplength = 100, command = lambda s = script: self.runScript(s))
            BUTTONS[script].grid(row = self.row, column = self.col)
            self.update()

            #Increment row and col and set new window size
            if self.col == 2:
                self.col = 0
                self.row += 1
                reached_max_width = True
            else:
                self.col += 1
                if not reached_max_width:
                    self.window_width += button_width * 13
            self.window_height = self.buttonsFrame.winfo_height() * (self.row*3)
            masterWindow.geometry("%dx%d" % (self.window_width, self.window_height))


        def runScript(self, script):
            print(script)
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 6

您使用以下代码行将窗口显式设置为特定大小:

masterWindow.geometry("%dx%d" % (self.window_width, self.window_height))
Run Code Online (Sandbox Code Playgroud)

因为您正在这样做,即使您添加小部件,tkinter 也会将窗口保持在该大小。如果您希望它自动调整大小,则需要删除该行代码。

此外,如果用户调整窗口大小,tkinter 将尝试遵守该大小。如果您希望它在添加新小部件时自动调整大小,您需要删除窗口大小,以便 tkinter 可以计算它。你可以通过调用来做到这一点masterWindow.geometry("")