是否可以做我自己的 Tkinter 自定义跟踪变量类型



我想知道是否有可能创建一个MyValueVar类型,相当于StringVar,BooleanVar,DoubleVar...

我读过学习Python,我只懂了Python编程的一半,并且几乎完成了Tkinter GUI应用程序开发蓝图。我也在互联网上谷歌,没有找到任何有关如何创建这种数据类型的信息。

我的愿望是创建一个可以附加到我的可视组件的类(它可能是一个 mixin 类),并且每次视觉组件更改时,其内部值(即自定义类对象实例)也会更改。理想的做法是拥有一些 MyValueVar 类型的变量之王,该变量将与可视组件同步。

对我来说,知道我必须实现哪个类和哪些方法或接口就足够了,总的来说,知道一些要坚持的文档。

提前致谢

根据评论,听起来您真正需要的只是视觉组件更改时的通知。这可以通过虚拟活动来完成。

下面是在组件更改颜色时更新标签的示例。组件每秒都会选择一种随机颜色;如果它与当前颜色不同,它将更改,并发送主程序正在侦听的事件。检测到事件时,将更新标签。

import tkinter as tk
import random
COLORS = ("red", "green", "yellow")
class Component(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.value = self.cget("background")
        self.after(1000, self.maybe_change)
    def maybe_change(self):
        new_color = random.choice(COLORS)
        if self.value != new_color:
            self.value = new_color
            self.configure(background=new_color)
            self.event_generate("<<ComponentChanged>>")
        self.after(1000, self.maybe_change)

class App(object):
    def __init__(self):
        self.root = tk.Tk()
        self.component = Component(self.root, width=300, height=50)
        self.label = tk.Label(self.root, text="")
        self.component.pack(side="top", fill="both", expand=True)
        self.label.pack(side="bottom", fill="x")
        self.component.bind("<<ComponentChanged>>",
                            self.handle_component_change)
    def handle_component_change(self, event):
        self.label.configure(text="component value is now '%s'" % self.component.value)
    def start(self):
        self.root.mainloop()
app = App()
app.start()

最新更新