python tkinter 如何在类外能实时访问mainloop中定义的self变量
时间: 2024-03-02 12:52:56 浏览: 126
要在类外访问mainloop中定义的self变量,需要使用全局变量或者设计一个全局管理的单例模式。具体来说,可以在定义类的模块外定义一个全局变量,然后在类中通过global语句声明变量,就可以在类中访问全局变量了。代码示例如下:
```
import tkinter as tk
root = tk.Tk()
class App:
def __init__(self):
global var # 声明全局变量
var = tk.StringVar()
self.label = tk.Label(root, textvariable=var)
self.label.pack()
self.update_var()
def update_var(self):
var.set("Hello, world!")
root.after(1000, self.update_var)
app = App()
root.mainloop()
# 在类外面访问self变量
print(var.get())
```
另外,也可以通过设计一个全局管理的单例模式来实现访问mainloop中定义的self变量。这种方法需要在类中定义一个静态方法,通过该方法返回类的唯一实例,然后在类外通过该方法获取实例,就可以访问类中定义的self变量了。代码示例如下:
```
import tkinter as tk
root = tk.Tk()
class App:
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super().__new__(cls, *args, **kwargs)
return cls._instance
def __init__(self):
self.var = tk.StringVar()
self.label = tk.Label(root, textvariable=self.var)
self.label.pack()
self.update_var()
def update_var(self):
self.var.set("Hello, world!")
root.after(1000, self.update_var)
@staticmethod
def get_instance():
if not App._instance:
App()
return App._instance
app = App.get_instance()
root.mainloop()
# 在类外面访问self变量
print(app.var.get())
```
阅读全文