Предотвратить динамическое изменение размеров ячеек Tkinter - PullRequest
1 голос
/ 21 сентября 2019

У меня есть класс Tkinter с сеткой, каждая из строк сетки должна иметь такой же вес, как указано в конфигурации строк, и содержимое сетки не должно влиять на размеры сетки, так как я отключил распространение.

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

class MainMenuPage(tkinter.Frame):
def __init__(self,parent,controller):
    tkinter.Frame.__init__(self,parent)
    self.controller=controller

    self.columnconfigure(0,weight=1)
    self.rowconfigure(0,weight=1)
    self.rowconfigure(1,weight=1)
    self.rowconfigure(2,weight=1)
    self.rowconfigure(3,weight=1)
    self.grid_propagate(0);

    self.color0=tkinter.Frame(self,bg="#bd1e2b")
    self.color0.grid(column=0,row=0,sticky="nesw")

    self.color1=tkinter.Frame(self,bg="#1e1ebd")
    self.color1.grid(column=0,row=1,sticky="nesw")

    self.color2=tkinter.Frame(self,bg="#1ebd48")
    self.color2.grid(column=0,row=2,sticky="nesw")

    self.color3=tkinter.Frame(self,bg="#bdb81e")
    self.color3.grid(column=0,row=3,sticky="nesw")

    image=Image.open("/path/settingsIcon.png")
    image=image.resize((54,54),Image.ANTIALIAS)
    self.settingsIcon=ImageTk.PhotoImage(image)
    self.settingsButton=tkinter.Button(self,compound=tkinter.TOP,width=54,height=54,image=self.settingsIcon,command=lambda:self.controller.showPage("valveMain"))
    self.settingsButton.grid(column=0,row=0,sticky="ne")

enter image description here

Как предотвратить изменение размера сетки при добавлении кнопки?

1 Ответ

1 голос
/ 21 сентября 2019

Я не совсем понимаю, чего вы пытаетесь достичь.Если цель состоит в том, чтобы убедиться, что все строки и / или столбцы имеют одинаковый размер, вы можете настроить строки и столбцы как часть единой группы.weight сам по себе этого не сделает, поскольку он только определяет, как распределяется дополнительное пространство, он не контролирует абсолютный размер строки или столбца.

Чтобы создать однородную группу, используйте uniformопция для row_configure и column_configure.Все строки или столбцы в одной и той же однородной группе будут иметь одинаковый размер пропорционально их весу.Если их вес одинаков, их размер будет таким же.

Из канонической документации tcl / tk:

Опция -uniform, если задано непустое значение, помещает строку в однородную группу с другими строками, имеющимито же значение для -универ.Пространство для строк, принадлежащих однородной группе, выделяется таким образом, чтобы их размеры всегда были строго пропорциональны их весовым значениям.

В вашем случае вы можете попробовать что-то вроде этого:

self.rowconfigure(0,weight=1, uniform='row')
self.rowconfigure(1,weight=1, uniform='row')
self.rowconfigure(2,weight=1, uniform='row')
self.rowconfigure(3,weight=1, uniform='row')

Для получения дополнительной информации см. Алгоритм сетки в документации по tcl / tk.Он точно описывает, как работает алгоритм сетки.

...