2017-02-03 2 views
0

Я пытаюсь написать программу Python Tkinter для отображения/удаления метки и записи на основе состояния Combobox, она отлично работает для отображения, но для удаления/скрытия она не работает.Tkinter Python - Удалить виджеты на основе состояния Comboxbox

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) 

ответ

0

Вы должны создать виджеты внутри 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) 
+0

Большое спасибо. Он отлично работает, как ожидалось. – jay

Смежные вопросы