Python.use(better,Tkinter)《余録》Event: mouse events

記事一覧

Python.use(better, Tkinter)
Event: mouse events《Python3.1》

《著》森こねこ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪1993/11/25

概要

イベントを処理する方法を紹介します。

Tkinter によるオブジェクト指向プログラミングへの扉を開きます。
※ Tcl/Tk で作成した例題を、Tkinter で再構成しました。

〓 事例:イベント処理

次のコードを実行すると、ウィンドウが現われます。

>>> ex_mouse_events()
マウスポタンを押すと、オブジェクトが出現します。
マウスカーソルが中に入ると、赤になります。 マウスカーソルが外に出ると、青になります。
カーソルを移動すると、オブジェクトも移動します。 ポタンを離すと、オブジェクトが固定します。
class TIPS(object):
    radius = 8
    color_create = "yellow"
    color_Enter  = "red"
    color_Leave  = "blue"
    
    def __init__(self, canvas):
        self.canvas = canvas
        self.bind()
        
    def bind(self):
        for sequence, func in [
            ("<1>"        , self.mouse_Press ),
            ("", self.mouse_Motion),
            ]:
            self.canvas.bind(sequence, func)

    def mouse_Press(self, event):
        X = event.x
        Y = event.y
        if not event.widget.find_withtag(CURRENT):
            R = self.radius
            item = self.canvas.create_oval(
                X-R, Y-R,
                X+R, Y+R,
                fill=self.color_create,
                )
            for e in "Enter","Leave":
                self.canvas.tag_bind(
                    item,
                    ""%e,
                    getattr(self, "mouse_%s"%e),
                    )
        self.x = X
        self.y = Y

    def mouse_Motion(self, event):
        X = event.x
        Y = event.y
        self.canvas.move(
            CURRENT, X-self.x, Y-self.y,
            )
        self.x = X
        self.y = Y
        
    def mouse_Enter(self, event):
        self.canvas.itemconfig(
            CURRENT, fill=self.color_Enter,
            )

    def mouse_Leave(self, event):
        self.canvas.itemconfig(
            CURRENT, fill=self.color_Leave,
            )

def ex_mouse_events():
    root = Tk()
    root.title("mouse events")
    root.geometry("200x185")

    w = Canvas(
        root,
        width=150, height=150, bg="Yellow",
        relief=RIDGE, borderwidth=2,
        )
    w.pack()

    tips = TIPS(w)

    w = Button(
        root,
        text="Quit",
        command=lambda: root.destroy(),
        )
    w.pack(side=BOTTOM)
    
    root.mainloop()

Last updated♪2009/09/05