web-dev-qa-db-ja.com

Tkinterでボタンの色を変更する方法

次のエラーが発生します:AttributeError: 'NoneType' object has no attribute '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")
10
Paul Ronjak

self.button = Button(...).grid(...)を実行すると、_self.button_に割り当てられるのはgrid()コマンドの結果ですnotButtonオブジェクトが作成されました。

パック/グリッドする前に_self.button_変数を割り当てる必要があります。次のようになります。

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

色の変更とともに複数の操作を実行する場合にボタンの色を変更する別の方法。 Tk().afterメソッドを使用して変更メソッドをバインドすると、色を変更したり、他の操作を実行したりできます。

Label.destroyは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)

元の色に戻すこともできます。

1
technazi