我在這個問題上做了幾次嘗試,終於找到了一種通過編程來隱藏組合框下拉列表的方法。我的代碼如下所示。
意見:
- 使用
"combobox_widget_object.event_generate('<Button-1>')"
可以 導致組合框下拉列表中顯示。事件'<Button-1>'
似乎是 固有地定義爲導致此行爲。
- 重複執行此命令的2個命令不會導致顯示 並隱藏組合框下拉列表。它仍然只顯示下拉列表 列表和單個命令一樣。
"combobox_widget_object.after(delay_ms, callback=None, *args)"
方法可用於指示組合框在某些時間延遲後運行功能 。該功能應該包含
"combobox_widget_object.event_generate('<Button-1>')"
方法,以使 隱藏下拉列表。
CODE:
# tkinter modules
import tkinter as tk
import tkinter.ttk as ttk
"""
Aim:
Create a combobox widget and use w.event_generate(sequence, sequence,**kw) to
simulate external stimuli to cause combobox dropdown list to show and hide.
Author: Sun Bear
Date: 16/01/2017
"""
# Function to activate combobox's '<Button-1>' event
def _source_delayed_clicked():
print ('\n def __source_delayed_clicked():')
print('Delayed 2nd simulation of external stimuli')
print('HIDE combobox Dropdown list. \n'
'IT WORKED!')
source.event_generate('<Button-1>')
root = tk.Tk()
source_var=tk.StringVar()
reference=['Peter', 'Scotty', 'Walter', 'Scott', 'Mary', 'Sarah']
# Create Main Frame in root
frame0 = ttk.Frame(root, borderwidth=10, relief=tk.RAISED)
frame0.grid(row=0, column=0, sticky='nsew')
# Create Combobox
source = ttk.Combobox(frame0, textvariable=source_var, values=reference)
source.grid(row=0, column=0, sticky='nsew')
# Simulate external stimuli using w.event_generate(sequence,**kw)
print('\n', '1st simulation of external stimuli using: \n'
' source.event_generate('"<Button-1>"') \n'
' SHOW Combobox Dropdown List.')
source.event_generate('<Button-1>')
#source.event_generate('<Button-1>') # running another similar command
# back to back didn't work
delay = 1000*6 # 6 seconds delay
source.after(delay, _source_delayed_clicked)
更新: 可替代地,以隱藏組合框下拉列表中, source.event_generate('<Escape>')
可以就位在功能def _source_delayed_clicked()
定義的source.event_generate('<Button-1>')
命令一起使用的命令。這模擬按下鍵盤"Esc"
鍵。
有人可以解釋爲什麼我得到了2個記過我的問題的選票嗎? –