2017-06-28 2 views
0

私はPython 2.7の問題を手伝ってくれることを願っています。私はオンラインで解決策を見つけることができませんでしたが、正直なところ、検索するキーワードが不明なので、これが冗長であれば申し訳ありません。Python 2.7 Tkinter:2つのウィジェットをクリック&リリースして、両方からの応答を得るには?

以下のコードは私の問題の例です。私は1つのボタン(技術的にラベル)をクリックして、それを保持するたびに

import Tkinter as tk 

root = tk.Tk() 

#Widgets. 
btn1 = tk.Label(root, text="btn1", bg="gray80") 
btn2 = tk.Label(root, text="btn2", bg="gray80") 
btn1.pack(side=tk.TOP, fill=tk.X) 
btn2.pack(side=tk.TOP, fill=tk.X) 

#Widget events. 
def onClick1(event): 
    print "Clicked button 1." 
def onRelease1(event): 
    print "Released button 1." 
def onClick2(event): 
    print "Clicked button 2." 
def onRelease2(event): 
    print "Released button 2." 

#Bindings. 
btn1.bind("<Button-1>", onClick1, add="+") 
btn1.bind("<ButtonRelease-1>", onRelease1, add="+") 
btn2.bind("<Button-1>", onClick2, add="+") 
btn2.bind("<ButtonRelease-1>", onRelease2, add="+") 

root.mainloop() 

は、そのためのonClickイベントを発生させますが、私は他に上にマウスをドラッグし、それを解放した場合、私は1つとして同じonReleaseを取得します私はクリックしましたが、私は現在マウスを持っているラベルのものではありません。これは私に今のところ戻ってきました。私はこれが必要な私のプログラムの全機能を捨てることができないので、どんな助けでも大歓迎です。

答えて

0

releaseイベントは、常にpressイベントを取得した同じウィジェットで発生します。ハンドラ内では、tkinterにカーソルの下にあるウィジェットを問い合わせることができます。

例:

import Tkinter as tk 

root = tk.Tk() 

btn1 = tk.Label(root, text="btn1", bg="gray80") 
btn2 = tk.Label(root, text="btn2", bg="gray80") 
btn1.pack(side=tk.TOP, fill=tk.X) 
btn2.pack(side=tk.TOP, fill=tk.X) 

def onRelease(event): 
    x,y = event.widget.winfo_pointerxy() 
    widget = event.widget.winfo_containing(x, y) 
    print("widget:", widget.cget("text")) 

btn1.bind("<ButtonRelease-1>", onRelease) 
btn2.bind("<ButtonRelease-1>", onRelease) 

root.mainloop() 
+0

それは働きます!私の実際のコードに合うようにいくつかのねじれが必要ですが、この方法は有望です。ありがとうございました。 –

関連する問題