Tkinter 网格删除遗忘配置

Tkinter 网格删除遗忘配置,tkinter,Tkinter,这是一个Tkinter程序,有两种模式可供选择。选择“蓝色”显示蓝色边框,选择“绿色”显示绿色边框 执行此操作的代码: from tkinter import Tk, Frame, Button, ttk class App(): def __init__(self, parent): self.parent = parent self.build_mode_selector_frame() self.build_green_frame()

这是一个Tkinter程序,有两种模式可供选择。选择“蓝色”显示蓝色边框,选择“绿色”显示绿色边框

执行此操作的代码:

from tkinter import Tk, Frame, Button, ttk

class App():

    def __init__(self, parent):
      self.parent = parent
      self.build_mode_selector_frame()
      self.build_green_frame()
      self.build_blue_frame()

    def build_mode_selector_frame(self):
      choices = ['blue','green']
      self.mode_selector_frame = Frame(self.parent, width=300, height=50)
      self.mode_selector = ttk.Combobox(self.mode_selector_frame, values=choices)
      self.mode_selector.bind("<<ComboboxSelected>>", self.on_mode_changed)
      self.mode_selector.grid(row=0, column=1)
      self.mode_selector_frame.grid(row=0, column=0)

    def build_blue_frame(self):
      self.blue_frame = Frame(self.parent, width=300, height=50, background="blue")
      self.blue_frame.grid(row=1, column=0)
      #Button(self.blue_frame).grid(row=0, column=1)


    def build_green_frame(self):
      self.green_frame = Frame(self.parent, width=300, height=50, background="green")
      self.green_frame.grid(row=1, column=0)

    def show_blue_frame(self):
      self.green_frame.grid_remove()
      self.blue_frame.grid()

    def show_green_frame(self):
      self.green_frame.grid()
      self.blue_frame.grid_remove()

    def on_mode_changed(self, event):
      selected_mode = self.mode_selector.get()
      if selected_mode == 'blue':
        self.show_blue_frame()
      elif selected_mode == 'green':
        self.show_green_frame()



root = Tk()
App(root)
root.mainloop()
这将使用栅格和栅格来隐藏和显示元素

但是现在,如果我在上面的build_blue_frame方法中,在蓝色框架中添加一个按钮,取消对按钮行的注释,grid_remove似乎会丢失所有的框架信息,如图中所示的高度和颜色

grid_remove不是应该记住所有的配置,比如高度、背景色等,即使在将按钮添加到框架中之后也是如此吗

grid_remove不是应该记住所有的配置,比如高度、背景色等,即使在将按钮添加到框架中之后也是如此吗

否。grid_remove只记住grid知道的关于行、列、粘性等的数据。它不记得任何关于要删除的小部件的属性

您看到的行为就是tkinter的设计工作方式。如果一个小部件有子部件,它将增长或收缩以尽可能适合子部件。将按钮添加到蓝色框时,由于未将蓝色框配置为粘贴到其所在空间的边缘,蓝色框将收缩以适合按钮


作为一般规则,在使用网格时,几乎总是应该给出一个粘性值。您还应该使用grid_rowconfigure和grid_columnconfigure为至少一行和一列指定权重,以便子级将使用额外的空间

谢谢..在研究体重时,我偶然发现了grid_。这与粘性的结合似乎起到了作用。@tao:关闭传播几乎总是错误的解决方案。保持打开状态会使您的UI对分辨率、窗口大小、字体和平台的更改更具响应性。OK将尝试使用权重。