python tkinter.ttk 鼠标单击时的组合框向下事件

python tkinter.ttk combobox down event on mouseclick

尽管进行了大量研究并且问题相当简单,但我没有找到我的问题的正确答案。 我想做的就是当 'Button-1' 单击时我的组合框会下拉。但无论我编写什么代码,组合都不会像我希望的那样运行。

下面我准备了一个简单的代码来演示我的问题:

from tkinter import *
import tkinter.ttk


def combo_events(evt):
    if int(evt.type) is 4:
        w = evt.widget
        w.event_generate('<Down>')


root = Tk()
li = ('row 1', 'row 2', 'row 3')

combo1 = tkinter.ttk.Combobox(root, value=li)
combo2 = tkinter.ttk.Combobox(root, value=li)

combo1.bind('<Button-1>', combo_events)
combo2.bind('<Button-1>', combo_events)

combo1.pack()
combo2.pack()

root.mainloop()

好吧,如果我尝试这段代码,组合会下拉,但不是预期的那样。因此,我尝试添加 'FocusIn' 事件的绑定,但这反而使情况复杂化并抑制了 'FocusOut' ...

any1 可以帮助我实现我的目标吗?

ps:我知道,单击小部件的框架会下拉组合,但更准确地说,我想在单击它时将其放下。

顺便问一下,我在哪里可以找到组合框可以触发的相当完整的事件列表?

谢谢你的努力和回答。

您为什么使用 int(evt.type) is 4 而不是 int(evt.type) == 4

应用此更改对我有用。

编辑 1

首先,感谢您向我们解释您真正想要的是什么。从你最初的问题中没想到这一点。

如果您想覆盖编辑行为,是时候进行更深入的挖掘了。

您在组合框中单击进入的小部件是一个条目小部件。您现在可以做的是定义何时在事件链中获取您的事件。即将应用代码。

编辑 2

第一次点击鼠标获取:

w.event_generate('<Down>', when='head')

为什么?因为Event Generate默认是将生成的Event追加到Event Chain中(放在最后,value = 'tail')。更改为 when='head' 会给出您想要的行为。