首页 > 解决方案 > 在 __init__ 方法中更改对象

问题描述

是否可以更改__init__方法中的对象?我想这样做,例如通过单击更改任何小部件的所有颜色:

from tkinter import *

class App(Tk):
    def __init__(self, bg="black"): #<----------
        super().__init__()
        self.geometry("400x400")

        self.bg = bg

        self.frame = Frame(self, bg=self.bg)
        self.frame.pack(fill=BOTH, expand=YES)

        self.btn = Button(self, text="Change BG", command=self.chng_bg)
        self.btn.pack()

    def chng_bg(self):
        self.bg = "red"             # I want to change the self.bg for example to use it bye Themes
                                    # without configure each widget seperatly


if __name__ == '__main__':
    App()
    mainloop()

所以在这里我试图将初始化更改bg=black为红色背景。我搜索了一个解决方案,但我没有找到任何东西。

标签: pythontkinter

解决方案


更改变量不会更改使用变量的小部件。您将需要自己显式更改小部件。

def chng_bg(self):
    self.bg = "red"
    self.configure(background=self.bg)
    self.frame.configure(bg=self.bg)
    ...

如果您使用主题 (ttk) 小部件,您可以更改主题的属性,所有使用该主题的小部件都会自动更新。


推荐阅读