1
當tk.OptionMenu
等於CUSTOM
時,下面的代碼顯示兩個tk.Entry
字段。如果選擇而非CUSTOM
,如何在視圖中隱藏tk.Entry
字段?基於OptionMenu值的Tkinter pack條目小部件,pack_forget否
例如,下面的代碼顯示兩個字段,如果用戶從下拉菜單中選擇CUSTOM
,但如果用戶去選擇另一個選項,我想刪除從視圖中添加的兩個字段,並再次顯示它們如果CUSTOM
是再次從下拉列表中選擇。從某種意義上說,切換它們。
我的研究已經轉向了pack_forget,破壞,跟蹤。我似乎無法弄清楚。
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()
當您嘗試'pack_forget'或'destroy'時會發生什麼?我猜你會得到一個錯誤。它說什麼?你能從中學到什麼? –
我沒有收到錯誤消息。每次選擇「CUSTOM」時,上面的代碼將打包「field1」和「field2」。這在邏輯上是合理的。我對理解(對tkinter而言是新手)的主要差距在於理解操作的位置。我有一個解決方案工作。我現在將它發佈。順便說一句,你在這裏的代碼示例是非常有用的。你的回答幾乎出現在我做的每一個tkinter搜索中! – Jarad
其實在你的代碼中有一個異常,如果你用'this except'除了Exception',除了Exception,e:print e',它會打印異常消息。 'new_frame'對函數是本地的。 – Ejaz