4

This is for example a create_text:

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

How could I delete this with a button?

4

1 回答 1

12

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

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

然后你可以像这样使用Canvas对象的delete()方法:

self.__canvas.delete(self.text_id)

另一种方法是将标签附加到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单击 a 时实现这一点,您还需要定义一个函数或方法,以便在调用上述Canvas方法之一时对其进行调用。然后,在创建按钮小部件时,通过command=配置选项指定其名称。

例如(在class定义内):

class 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.
于 2015-03-03T21:16:12.053 回答