2016-08-10 4 views
0

Я не нашел правильного ответа на мою проблему, несмотря на интенсивные исследования и довольно простую проблему. Все, что я хотел бы сделать, это мои выпадающие списки при нажатии кнопки «Button-1». Но независимо от того, что я кодирую, комбо не ведет себя так, как я желаю.python tkinter.ttk combobox down event on mouseclick

Далее я подготовил простой код, чтобы продемонстрировать мою проблему:

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: Я знаю, что комбо выйдет, щелкнув рамку виджета, но, если быть более точным, я бы хотел его сбросить, щелкнув по нему.

И, кстати, где я могу найти довольно полный список событий, которые может вызывать combobox?

thx для усилий и ответа.

ответ

0

Почему вы используете int(evt.type) is 4 вместо int(evt.type) == 4?

Применяя это изменение, оно работает для меня.

Edit 1

Прежде всего, спасибо за разъяснение нам, что вы действительно хотите иметь. Не ожидал этого от вашего первоначального вопроса.

Если вы хотите переопределить поведение редактирования, пришло время немного углубиться.

Виджет, который вы нажимаете внутри выпадающего списка, представляет собой виджет ввода. Теперь вы можете определить, когда ваше событие будет выбрано внутри цепочки событий. Скоро будет применяться код.

Edit 2

Чтобы получить его при первой мыши:

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

Почему? Поскольку по умолчанию Event Generate является добавление сгенерированного события в цепочку событий (поместите его в конец, value = 'tail'). Переход на when='head' дает желаемое поведение.

+0

В этом отношении, зачем вообще проверять? Существует только одна привязка, поэтому она может иметь только одно значение. –

+0

Привет, конечно, в моем примере кода есть только одна привязка, которую я разрезал, чтобы показать эффект, который я писал abt. на самом деле, в моем реальном коде есть довольно много привязок. –

+0

Кроме того, я проверяю идентификацию, так как я сравниваю с int, но, тем не менее, вы можете проверить с оператором равенства так же. Тем не менее, это изменение не решит проблему. Если вы попытаетесь щелкнуть в поле со списком, оно сначала позволит вам записать в него (установить Focus?) И только опустить второй щелчок. Но то, что я пытаюсь сделать, заключается в том, что он будет делать оба в одно и то же время (или, если это невозможно, затем опуститься, а не позволить вам записать в него.) –

 Смежные вопросы

  • Нет связанных вопросов^_^