2016-08-10 3 views
0

激しい研究とかなり単純な問題にもかかわらず、私の問題に対する正解は見つかりません。 私がしたいのは、 'Button-1'でクリックするとコンボボックスがドロップダウンされることです。しかし、私が何をコードしているかにかかわらず、コンボは私が望むように行動しません。python tkinter.ttkコンボボックスのイベントをマウスクリックして

私は私の問題を実証するための簡単なコード作成し、次の

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:ウィジェットのフレームをクリックするとコンボがドロップされることがわかりましたが、より正確にはクリックするとドロップします。

そして、コンボボックスが引き起こす可能性のあるイベントの完全なリストはどこにありますか?努力と回答のために

thx

答えて

0

なぜint(evt.type) == 4の代わりにint(evt.type) is 4を使用していますか?

この変更を適用すると、私にとって効果的です。

編集1

まず第一に、あなたが本当にしたいことを私たちにお説明していただきありがとうございます。あなたの最初の質問からこれを期待していませんでした。

編集の動作を変更したい場合は、少し深く掘り下げてください。

コンボボックス内でクリックするウィジェットは、エントリウィジェットです。あなたが今できることは、あなたのイベントがいつイベントチェーン内でフェッチされるかを定義することです。すぐにコードを適用します。

編集2

最初のマウスクリックでそれを取得するには:

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

なぜ?イベントジェネレートのデフォルトは、生成されたイベントをイベントチェーンに追加することです(その最後にvalue = 'tail')。 when='head'に変更すると、目的の動作が得られます。

+0

その点については、どうしてチェックするのですか?バインディングは1つしかないので、1つの値しか指定できません。 –

+0

こんにちは、私のサンプルコードには、私がabtを書いていた効果を表示するためだけにカットしたバインディングが1つあります。実際、私の実際のコードにはかなりのバインディングがあります。 –

+0

また、私はintと比較しているのでアイデンティティをチェックしていますが、もちろん同様の方法で等価演算子でチェックすることはできます。それにもかかわらず、この変更は問題を解決しません。コンボボックスをクリックして試してみると、最初に書き込むことができます(フォーカスを設定します)、2回目のクリックだけをドロップします。しかし、私がやろうとしていることは、それが同時に(あるいは可能でないなら、あなたがそれに書き込むことを可能にするのではなく)ドロップダウンするということです。 –

関連する問題