我在这个问题上做了几次尝试,终于找到了一种通过编程隐藏组合框下拉列表的方法。我的代码如下所示。
观察:
- 使用
"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>')" 方法以导致
隐藏下拉列表。
代码:
# 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" 键。