我想知道是否有可能创建一个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()