[英]python tkinter.ttk combobox down event on mouseclick
盡管進行了深入研究並且相當簡單,但我仍未找到正確的答案。 我所要做的就是,當我按下“按鈕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” ...
任何人都可以幫助我實現目標嗎?
ps:我知道,該組合將通過單擊小部件的框架而下拉,但更確切地說,我想在單擊時將其拖放。
順便說一句,在哪里可以找到組合框可以觸發的事件的完整列表?
感謝努力和回答。
為什么使用int(evt.type) is 4
而不是int(evt.type) == 4
?
應用此更改對我有用。
編輯1
首先,感謝您向我們解釋您真正想要的東西。 沒想到您最初提出這個問題。
如果要覆蓋編輯行為,那么該進行更深入的研究了。
您在組合框中單擊的小部件是輸入小部件。 現在,您可以定義在事件鏈中何時提取事件。 即將應用代碼。
編輯2
要在第一個鼠標上單擊它,請執行以下操作:
w.event_generate('<Down>', when='head')
為什么? 因為事件生成的默認值是將生成的事件附加到事件鏈(將其放在末尾,所以value ='tail')。 更改為when='head'
可以滿足您的期望行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.