2017-10-24 22 views
1

テキストフィールドの入力に基づいてDataFrameからリストを取得するボタンを作成しました。ボタンを押すたびに、リストがリフレッシュされます。リスト(OptionMenuとして)を別のFrame(outputFrame)に出力します。ただし、このボタンを押すたびに、新しいOptionMenuが(前のものを上書きするのではなく)Frameに追加されます。ボタンを押すたびに 'ouputFrame'の内容が上書きされるようにするにはどうすればよいですか?Tkinterフレームから要素を削除/上書きする

# start 
root = Tkinter.Tk() 

# frames 
searchBoxClientFrame = Tkinter.Frame(root).pack() 
searchButtonFrame = Tkinter.Frame(root).pack() 
outputFrame = Tkinter.Frame(root).pack() 

# text field 
searchBoxClient = Tkinter.Text(searchBoxClientFrame, height=1, width=30).pack() 

# function when button is pressed 
def getOutput(): 
    outputFrame.pack_forget() 
    outputFrame.pack() 
    clientSearch = str(searchBoxClient.get(1.0, Tkinter.END))[:-1] 
    # retrieve list of clients based on search query 
    clientsFound = [s for s in df.groupby('clients').count().index.values if clientSearch.lower() in s.lower()] 
    clientSelected = applicationui.Tkinter.StringVar(root) 
    if len(clientsFound) > 0: 
     clientSelected.set(clientsFound[0]) 
     Tkinter.OptionMenu(outputFrame, clientSelected, *clientsFound).pack() 
    else: 
     Tkinter.Label(outputFrame, text='Client not found!').pack() 

Tkinter.Button(searchButtonFrame, text='Search', command=getOutput).pack() 

root.mainloop() 

答えて

0

私たちは、実際にOptionMenu自体の値を更新するのではなく、それを破壊する(あるいはそれは親だ)し、それを再描画することができます。次のスニペットのthis answerに寄付:

import tkinter as tk 

root = tk.Tk() 
var = tk.StringVar(root) 
choice = [1, 2, 3] 
var.set(choice[0]) 

option = tk.OptionMenu(root, var, *choice) 
option.pack() 

def command(): 
    option['menu'].delete(0, 'end') 
    for i in range(len(choice)): 
     choice[i] += 1 
     option['menu'].add_command(label=choice[i], command=tk._setit(var, choice[i])) 
    var.set(choice[0]) 

button = tk.Button(root, text="Ok", command=command) 
button.pack() 

root.mainloop() 
関連する問題