Автоматическое изменение размера окна tkinter, чтобы соответствовать всем виджетам

1

Я хотел бы иметь динамический размер для основного окна 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)
Теги:
tkinter

2 ответа

0

Вы явно устанавливаете окно в определенный размер с помощью этой строки кода:

masterWindow.geometry("%dx%d" % (self.window_width, self.window_height))

Поскольку вы это делаете, tkinter будет поддерживать окно до такого размера, даже если вы добавляете виджеты. Если вы хотите, чтобы это было автоматически, вам нужно удалить эту строку кода.

Кроме того, если пользователь изменяет размер окна, tkinter попытается оценить этот размер. Если вы хотите, чтобы он автоматически изменял размер при добавлении новых виджетов, вам нужно будет удалить размер окна, чтобы tkinter мог его вычислить. Вы можете сделать это, вызвав masterWindow.geometry("").

  • 0
    Я оставил self.window_start_x & self.window_start_y в своем ответе, потому что я действительно хотел определить, где будет появляться окно. Но это правильно. Удаление определения размера окна сделало окно динамически изменяющим размеры себя, когда виджет добавлен.
0

Я нашел проблему. Проблема заключалась в том, что я устанавливал начальную ширину/высоту для mainWindow Tkinter в блоке кода:

#Main Window min width
self.window_width = screen_width * .01
self.window_height = screen_height * .04
masterWindow.geometry("%dx%d+%d+%d" % (self.window_width, self.window_height, self.window_start_x, self.window_start_y))

Я удалил это определение размера и настройки из геометрии, чтобы код выглядел так, и он работал:

masterWindow.geometry("+%d+%d" % (self.window_start_x, self.window_start_y))

Теперь окно автоматически изменяет размер для учета всех кнопок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню