Как явно изменить размер фреймов в tkinter? - PullRequest
4 голосов
/ 28 мая 2020

, так что сейчас я работаю над частью кода, который позже будет интегрирован во что-то еще, чтобы действовать как конфигуратор настроек. На данный момент я хочу иметь окно, расположенное так, как показано ниже: Layout

, где каждое цветное поле представляет собой рамку. Размер этого окна нельзя изменять и всегда будет 480x720 пикселей. Таким образом, я хочу, чтобы 3 кадра, которые я использовал, sideBar (желтый), контейнер (синий) и stati c (красный), всегда оставались одного и того же размера и заполняли окно, как показано выше, примерно той же крысой ios ( не обязательно быть точным).

Код этого окна ниже

        self.window = tk.Tk()

        self.windowHeight = 480
        self.windowLength = 720
        self.windowDimensions = str(self.windowLength)+"x"+str(self.windowHeight) #make diemnsions string; dimensions are set as a single string
        self.window.geometry(self.windowDimensions)
        self.window.resizable(width=False, height=False)

        self.container = tk.Frame(self.window, relief="sunken", borderwidth=2) #instantiate new window
        self.sideBar = tk.Frame(self.window,  relief="sunken", borderwidth=2)
        self.static = tk.Frame(self.window, relief="sunken", borderwidth=2)

        self.sideBar.grid_propagate(False)
        self.sideBar.grid(row=0, column=0)
        self.container.grid(row=0,column=1)
        self.static.grid(row=5, column=1)


        self.configuratorObject = configuratorObject 

        audioButton = tk.Button(self.sideBar, text="Audio Page", command=lambda: self.raisePage("audioPage"))
        colourButton = tk.Button(self.sideBar, text="Colours", command=lambda: self.raisePage("coloursPage"))
        saveButton = tk.Button(self.static, text = "Save", state="disabled")
        applyButton = tk.Button(self.static, text = "Apply", state="disabled")
        audioButton.pack()
        colourButton.pack()
        saveButton.pack()
        applyButton.pack()

Я попытался изменить параметры height и width сеток, но на самом деле они, кажется, ничего не делают. Итак, как я мог go явно указать макет и размеры фреймов?

Любая помощь приветствуется

1 Ответ

6 голосов
/ 28 мая 2020

В комментариях, которые вы написали

Если есть способ заставить tkinter сделать это, то это было бы здорово

Это определенно предпочтительный способ, чем принуждение виджетов к определенному размеру.

Мы начнем с использования pack вместо grid для трех кадров. Для такого базового макета c требуется меньше строк кода, чем grid.

self.sideBar.pack(side="left", fill="y")
self.static.pack(side="bottom", fill="x")
self.container.pack(side="top", fill="both", expand=True)

Затем добавьте кнопки слева. Это приведет к уменьшению ширины левой рамки по размеру кнопок. Поскольку мы использовали fill="y", высота будет оставаться равной полной высоте окна.

audioButton.pack(side="top", fill="x")
colourButton.pack(side="top", fill="x")

Наконец, добавьте кнопки внизу. Исходный код показывает их сложенными сверху вниз, но на иллюстрации они показаны в одной горизонтальной строке. Этот пример соответствует рисунку.

applyButton.pack(side="right", padx=10)
saveButton.pack(side="right", padx=10)

В результате мы получаем окно, которое выглядит следующим образом, а пропорции и ориентация остаются неизменными при изменении размера окна:

screenshot


Примечание: вы также можете сделать это с помощью grid, но для применения весов к строкам и столбцам потребуется еще несколько строк кода. Я лично предпочитаю pack, когда макет естественно не помещается в сетку, поскольку для этого требуется меньше строк кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...