4

タイトルが示すように、Tkinter のモーション トリガー イベント ハンドラー内でカーソル位置を取得しています。

既存のラベル ウィジェットを場所で更新したいと思います。Labelただし、イベント ハンドラー内でテキスト フィールド (または外部オブジェクト)を編集する方法を理解することはできません。私が理解していることから、イベントはハンドラーに渡される唯一の引数です。つまり、ラベル オブジェクトを渡すことはできません。

ハンドラー外のオブジェクトにアクセスするにはどうすればよいですか?

4

1 に答える 1

3

Tkinterはイベントハンドラーでオブジェクトを渡しませんが、とにかく、どのオブジェクトに関心があるかをどのように知るのでしょうか?

代わりに、イベントハンドラーから更新するオブジェクトにアクセスするのはユーザーの責任です。たとえば、イベントハンドラーは単純な関数であり、グローバルオブジェクトにアクセスできます。または、オブジェクトのメソッドであり、自分自身を介してそのオブジェクトにアクセスできます。

これがグローバルオブジェクトを使用する方法です

from Tkinter import *

root = Tk()
frame = Frame(root)
frame.configure(width=300,height=300)

def onmotion(event):
    root.title("Mouse at %s,%s"%(event.x, event.y))

frame.bind("<Motion>", onmotion)
frame.pack()
root.title("Event test")
root.mainloop()

同じことがオブジェクト指向の方法で行うことができます

from Tkinter import *

class MyFrame(Frame):
    def __init__(self, root):
        Frame.__init__(self, root)
        self.parent = root
        self.configure(width=300,height=300)
        self.pack()
        self.bind("<Motion>", self.onmotion)

    def onmotion(self, event):
        self.parent.title("Mouse at %s,%s"%(event.x, event.y))

root = Tk()
frame = MyFrame(root)
root.title("Event test")
root.mainloop()
于 2010-04-18T04:19:27.780 に答える