4

これは、たとえば create_text です。

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

ボタンでこれを削除するにはどうすればよいですか?

4

1 に答える 1

12

これを行う 1 つの方法は、すべてのオブジェクト コンストラクターが返すオブジェクト 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)

もう 1 つの方法は、オブジェクトにタグを付けて、それを使用することです。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定義内):

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 に答える