2016-08-23 8 views
1

tk.OptionMenuCUSTOMに相当する場合、次のコードは2つのtk.Entryフィールドを表示します。 tk.OptionMenuが選択された後にtk.Entryフィールドが表示されないようにするには、CUSTOMではありません。例えばTkinter pack Entry Widgets OptionMenu値に基づいて、pack_forgetそれ以外の場合

をユーザーがドロップダウンからCUSTOMを選択した場合、以下のコードは2つのフィールドが表示されますが、ユーザーが別のオプションを選択するために行く場合、私は、ビューから追加された2つのフィールドを削除し、CUSTOMがある場合はそれらを再度表示したいですドロップダウンから再度選択します。ある意味で、それらを切り替えます。

私の研究は、pack_forget破壊、トレースを上げています。私はそれを把握していないようだ。

tkinter

import tkinter as tk 

root = tk.Tk() 

frame = tk.Frame(root) 
frame.pack() 

def func(*args): 
    if date_var.get() == 'CUSTOM': 
    new_frame = tk.Frame(frame) 
    new_frame.pack(side=tk.LEFT) 
    field1 = tk.Entry(new_frame) 
    field2 = tk.Entry(new_frame) 
    field1.pack() 
    field2.pack() 
    else: 
    try: 
     new_frame.destroy() 
    except: 
     pass 

date_var = tk.StringVar() 
date_var.trace('w', func) 
date_var.set('LAST_10_DAYS') 
date_options = ['CUSTOM', 'LAST_10_DAYS', 'LAST_50_DAYS', 'LAST_10_MILLION_YEARS'] 
date = tk.OptionMenu(frame, date_var, *date_options) 
date.pack(pady=10) 

root.mainloop() 
+0

'pack_forget'または' destroy'を実行するとどうなりますか?私はあなたに誤りがあると思っています。それは何と言いますか?あなたはそれから何を学ぶことができますか? –

+0

エラーは表示されません。上記のコードは 'CUSTOM'が選択されるたびに' field1'と 'field2'をパッキングしています。論理的には意味があります。私の理解の主な違い(tkinterには新しい)は操作の配置を理解することでした。私は仕事の解決策を得ました。私は今それを投稿します。ところで、あなたのコード例はここに非常に役立ちます。あなたの答えは、私がするすべてのtkinter検索で表示されます! – Jarad

+0

実際にあなたのコードの前に例外がありました。この例外を「except例外e:print e」で 'except'に変更すると、例外メッセージが出力されます。 'new_frame'は関数にとってローカルでした。 – Ejaz

答えて

1

私はそれが機能のnew_frametk.Frame外にfield1field2を置くことによって動作するようになりました。次にif文にOptionMenuの値に基づいてpackまたはpack_forgetnew_frameのいずれかを判断させます。これが最善の方法だとは言えませんが、今のところうまくいきます。

import tkinter as tk 

root = tk.Tk() 

frame = tk.Frame(root) 
frame.pack() 

new_frame = tk.Frame(frame) 
field1 = tk.Entry(new_frame) 
field2 = tk.Entry(new_frame) 
field1.pack() 
field2.pack() 

def func(*args): 
    if date_var.get() == 'CUSTOM': 
    new_frame.pack(side=tk.LEFT) 
    else: 
    new_frame.pack_forget() 

date_var = tk.StringVar() 
date_var.trace('w', func) 
date_var.set('LAST_10_DAYS') 
date_options = ['CUSTOM', 'LAST_10_DAYS', 'LAST_50_DAYS', 'LAST_10_MILLION_YEARS'] 
date = tk.OptionMenu(frame, date_var, *date_options) 
date.pack(pady=10) 

root.mainloop() 
関連する問題