了解tkinter tag_bind

时间:2018-04-06 19:27:50

标签: python canvas tkinter

我无法弄清楚如何使用与画布关联的tag_bind方法。我创建了oval,并希望能够通过点击生成event。当我这样做时,没有任何反应。 tag_bind的正确用法是什么?

import tkinter as tk

class Window():

    def __init__(self, master):
        self.master = master
        self.create_widgets()

    def create_widgets(self):
        self.c = tk.Canvas(self.master, bg='white', height=200, width=300)
        self.c.pack()

        b = tk.Button(self.master, text='Draw', command=self.draw)
        b.pack()

    def draw(self):
        self.c.delete('all')
        self.oval = self.c.create_oval([30,50], [130,80])
        self.rect = self.c.create_rectangle([180,10], [280,80])

        self.c.tag_bind(self.oval, '<Button-1>', self.oval_func)

    def oval_func(self, event):
        self.c.delete(self.rect)
        self.c.create_text(150, 150, text='Hello, world!', anchor='w')

if __name__ == '__main__':
    root = tk.Tk()
    app = Window(root)
    root.mainloop()

1 个答案:

答案 0 :(得分:1)

代码正在运行。但是,绑定到画布对象时,必须单击绘制对象的一部分。由于你没有填充椭圆形,这意味着你必须点击它的轮廓。

如果您使用与背景(或任何其他颜色)相同的颜色填充它,您可以单击椭圆形中的任何位置。

self.oval = self.c.create_oval([30,50], [130,80], fill="white")