【发布时间】:2017-10-30 09:20:12
【问题描述】:
这是一个 Tkinter 程序,有两种模式可供选择。选择“blue”显示蓝框,选择“green”显示绿框。
执行此操作的代码:
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()
这使用grid_remove() 和grid() 来隐藏和显示元素。
但是现在,如果我在蓝色框架中添加一个按钮(取消注释上面build_blue_frame 方法中的按钮行),grid_remove 似乎会丢失所有框架信息,如在这个 gif 中可以看到的高度和颜色。
难道grid_remove 不应该记住所有配置,如高度、背景颜色等,即使在将按钮添加到框架之后也是如此?
【问题讨论】:
标签: tkinter