2017-02-03 23 views
0

Combobox条件に基づいてLabelとEntryを表示/削除するPython Tkinterプログラムを作成しようとしていますが、表示はうまく機能していますが、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の中にウィジェットを作成し、グローバル変数に割り当てる必要があります。

これで、ウィジェットの2番目のペアを作成すると(ifの前に作成するため)、この2番目のペアは削除されますが、最初のペアは引き続き表示されますが、それらをグローバル変数に割り当てませんでした。

ウィジェットを最初に作成することもできます。後でウィジェットを表示したり非表示にしたりすることもできます。

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

関連する問題