Tkinter Python - 根据组合框条件删除小部件
Tkinter Python - Remove Widgets based on Comboxbox condition
我正在尝试编写一个 Python Tkinter 程序到 display/remove 一个基于组合框条件的标签和条目,它可以很好地显示,但对于 remove/hide 它不起作用.
def on_field_change(index, value, op):
var_select_combo = box.current()
serv_label = Label(frame1, text="Servive Name")
E3 = Entry(frame1, bd=5)
if var_select_combo == 1:
serv_label.grid(row=3)
E3.grid(row=3, column=1, pady=10)
if var_select_combo == 0:
serv_label.grid_forget()
E3.grid_forget()
L3 = Label(frame1, text="Database")
L3.grid(row=0,pady=10)
box_value = StringVar()
box_value.trace('w',on_field_change)
box = ttk.Combobox(frame1, text="Database", textvariable=box_value,
state='readonly')
box['values'] = ('Teradata','Oracle')
box.current(0)
box.grid(column=1, row=0,pady=10)
您必须在 if
中创建小部件,并且必须将它们分配给全局变量。
现在,当您选择删除时,您会创建第二对小部件(因为您在 if
之前创建了它),然后您删除了第二对小部件,但第一对仍然可见 - 但您无权访问第一对,因为您没有将它们分配给全局变量。
您也可以只创建一次小部件 - 在开始时 - 之后只显示和隐藏它。
def on_field_change(index, value, op):
var_select_combo = box.current()
if var_select_combo == 1:
serv_label.grid(row=3)
E3.grid(row=3, column=1, pady=10)
else:
serv_label.grid_forget()
E3.grid_forget()
# create at start assigned to global variables
serv_label = Label(frame1, text="Servive Name")
E3 = Entry(frame1, bd=5)
我正在尝试编写一个 Python Tkinter 程序到 display/remove 一个基于组合框条件的标签和条目,它可以很好地显示,但对于 remove/hide 它不起作用.
def on_field_change(index, value, op):
var_select_combo = box.current()
serv_label = Label(frame1, text="Servive Name")
E3 = Entry(frame1, bd=5)
if var_select_combo == 1:
serv_label.grid(row=3)
E3.grid(row=3, column=1, pady=10)
if var_select_combo == 0:
serv_label.grid_forget()
E3.grid_forget()
L3 = Label(frame1, text="Database")
L3.grid(row=0,pady=10)
box_value = StringVar()
box_value.trace('w',on_field_change)
box = ttk.Combobox(frame1, text="Database", textvariable=box_value,
state='readonly')
box['values'] = ('Teradata','Oracle')
box.current(0)
box.grid(column=1, row=0,pady=10)
您必须在 if
中创建小部件,并且必须将它们分配给全局变量。
现在,当您选择删除时,您会创建第二对小部件(因为您在 if
之前创建了它),然后您删除了第二对小部件,但第一对仍然可见 - 但您无权访问第一对,因为您没有将它们分配给全局变量。
您也可以只创建一次小部件 - 在开始时 - 之后只显示和隐藏它。
def on_field_change(index, value, op):
var_select_combo = box.current()
if var_select_combo == 1:
serv_label.grid(row=3)
E3.grid(row=3, column=1, pady=10)
else:
serv_label.grid_forget()
E3.grid_forget()
# create at start assigned to global variables
serv_label = Label(frame1, text="Servive Name")
E3 = Entry(frame1, bd=5)