防止Tkinter网格动态调整单元格的大小

时间:2019-09-21 18:11:23

标签: python tkinter raspberry-pi grid tkinter-layout

我有一个带有网格的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 个答案:

答案 0 :(得分:1)

我不完全理解您要完成的工作。如果目标是确保每个行和/或列的大小均相同,则可以将行和列配置为统一组的一部分。 weight不能做到这一点,因为它仅配置如何分配额外的空间,而不能控制行或列的绝对大小。

要创建统一组,请对uniformrow_configure使用column_configure选项。同一统一组中的所有行或列的大小均与其重量成比例。如果它们的重量相同,则它们的尺寸将相同。

从标准的tcl / tk文档中:

  

当提供非空值时,-uniform选项会将行与-uniform值相同的其他行放在同一组中。分配属于统一组的行的空间,以便它们的大小始终与-weight值严格成比例。

在您的情况下,您可以尝试执行以下操作:

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文档中的The grid algorithm。它精确地描述了网格算法的工作原理。