情况:当我使用鼠标按钮点击ttk.Combobox
的“向下箭头”时,它的标准行为是显示下拉列表。当第二次单击向下箭头时,组合框下拉列表将被隐藏。
使用键盘。可以通过按“向下箭头”一次显示组合框下拉列表。再按下“向下箭头”将向下滚动下拉列表到结尾。反复按“向上箭头”将向下滚动下拉列表,直到突出显示/选择到达下拉列表的顶部,但它最终不会隐藏下拉列表。
问题:不使用鼠标或键盘,即使用计算机编程,如何隐藏ttk.Combobox
的公开下拉列表。我知道 w.event_generate("<Down>")
命令可用于编程ttk.Combobox
以显示它的下拉列表。但是我如何实现相反的目标呢?也就是说,如何使用相同的 w.event_generate()命令来隐藏下拉列表?或者我应该使用其他什么tkinter命令来实现我想要的目标?
答案 0 :(得分:1)
我在这个问题上做了几次尝试,终于找到了一种通过编程隐藏组合框下拉列表的方法。我的代码如下所示。
<强>意见:强>
"combobox_widget_object.event_generate('<Button-1>')"
即可
导致组合框下拉列表显示。事件'<Button-1>'
似乎是
本质上定义为导致此行为。"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>')
代替函数source.event_generate('<Button-1>')
中定义的def _source_delayed_clicked()
命令。这模拟了按下键盘"Esc"
键。