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'
会给出您想要的行为。
尽管进行了大量研究并且问题相当简单,但我没有找到我的问题的正确答案。 我想做的就是当 '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'
会给出您想要的行为。