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)