web-dev-qa-db-fra.com

Comment changer la couleur du bouton avec tkinter

Je continue à avoir l'erreur suivante: AttributeError: l'objet 'NoneType' n'a pas d'attribut 'configure'

# create color button
self.button = Button(self,
                     text = "Click Me",
                     command = self.color_change,
                     bg = "blue"
                    ).grid(row = 2, column = 2, sticky = W)

def color_change(self):
    """Changes the button's color"""

    self.button.configure(bg = "red")
9
Paul Ronjak

Lorsque vous faites self.button = Button(...).grid(...), ce qui est affecté à self.button est le résultat de la commande grid(), not une référence à l'objet Button créé.

Vous devez assigner votre variable self.button avant de l’emballer ou de la graver. Elle devrait ressembler à ceci:

self.button = Button(self,text="Click Me",command=self.color_change,bg="blue")
self.button.grid(row = 2, column = 2, sticky = W)
14
Symon

Une autre façon de changer la couleur d'un bouton si vous souhaitez effectuer plusieurs opérations en même temps que le changement de couleur. L'utilisation de la méthode Tk().after et la liaison d'une méthode de modification vous permettent de changer de couleur et d'effectuer d'autres opérations. 

Label.destroy est un autre exemple de la méthode after.

    def export_win():
        //Some Operation
        orig_color = export_finding_graph.cget("background")
        export_finding_graph.configure(background = "green")

        tt = "Exported"
        label = Label(tab1_closed_observations, text=tt, font=("Helvetica", 12))
        label.grid(row=0,column=0,padx=10,pady=5,columnspan=3)

        def change(orig_color):
            export_finding_graph.configure(background = orig_color)

        tab1_closed_observations.after(1000, lambda: change(orig_color))
        tab1_closed_observations.after(500, label.destroy)


    export_finding_graph = Button(tab1_closed_observations, text='Export', command=export_win)
    export_finding_graph.grid(row=6,column=4,padx=70,pady=20,sticky='we',columnspan=3)

Vous pouvez également revenir à la couleur d'origine. 

0
technazi