如何删除Canvas文本对象?

时间:2015-03-03 20:00:35

标签: python tkinter tkinter-canvas

这是一个create_text:

self.__canvas.create_text(350, lineVotes, text=str(likesPrinted),
                          font=("calibri", 30), fill="#66FF99", anchor=E)

我怎么能用按钮删除它?

1 个答案:

答案 0 :(得分:7)

一种方法是使用object ID所有Canvas对象构造函数返回:

id = self.__canvas.create_text(350, lineVotes,
                               text=str(likesPrinted),
                               font=("calibri", 30), fill="#66FF99", anchor=E)

然后您可以使用Canvas对象的delete()方法列表,如下所示:

self.__canvas.delete(id)

另一种方法是将tag附加到Canvas对象,并使用它:

self.__canvas.create_text(350, lineVotes,
                          text=str(likesPrinted),
                          font=("calibri", 30), fill="#66FF99", anchor=E,
                          tag="some_tag")

然后将标记传递给delete()方法而不是对象ID:

self.__canvas.delete("some_tag")

标记的名称可以是任何不包含空格或句点的字符串。

标签更强大,因为您可以将同一个标签提供给多个对象,然后将它们作为一个组进行操作。相反,一个对象可以通过指定它们的元组来附加多个标记:即构造函数调用中的tag=("1234", "@special", "posn:13,42")

要在单击Button时实现此目的,您还需要定义一个函数或方法,以便在调用上述Canvas方法时调用其中一个方法。然后,在创建按钮小部件时,通过command=配置选项指定其名称。

例如(在class定义内):

def create_widgets(self):
    self.text_id = self.__canvas.create_text(
                            350, lineVotes, text=str(likesPrinted),
                            font=("calibri", 30), fill="#66FF99", anchor=E)
    self.delete_btn = Button(root, text="Delete text", command=self.delete_text)
    self.delete_btn.pack()

def delete_text(self):
    """ Delete the canvas text object. """
    if self.text_id:
        self.__canvas.delete(self.text_id)
        self.text_id = None  # To avoid multiple deletions.