我想启动一个类变量,以便将它传递给另一个类。此变量必须是StringVar
变量,因为我想将其用于Entry
Tkinter
函数。到目前为止我所做的是:
class ClassA:
var1 = StringVar()
def __init__(self,master):
entry1 = Entry(master, textvariable = var1)
root = Tk()
my_gui = ClassA(root)
root.mainloop()
然而,它给出了消息:
StringVar instance has no attribute '_tk'.
这可以通过在Tk()
声明之前添加StringVar
来解决,但这会在我启动应用时生成一个新窗口。有没有办法在不必添加Tk()
行的情况下声明它?当我在课堂外发起Tk()
时,我无法弄清楚为什么会这样。
答案 0 :(得分:1)
class
声明下的非定义行会在到达时立即被读取,并且在var1 = StringVar()
没有Tk
个实例的时候会被读取,因此出错
您可以改为在类var1
中的方法中分配__init__
类变量。替换:
class ClassA:
var1 = StringVar()
def __init__(self,master):
entry1 = Entry(master, textvariable = var1)
使用:
class ClassA:
def __init__(self,master):
entry1 = Entry(master)
ClassA.var1 = StringVar()
entry1['textvariable'] = ClassA.var1
一个完整的例子:
try:
import tkinter as tk
except ImportError:
import Tkinter as tk
class ClassA:
def __init__(self, master):
entry1 = tk.Entry(master)
ClassA.var1 = tk.StringVar()
entry1['textvariable'] = ClassA.var1
ClassA.var1.set('"asd"')
print("[Inside call], it is: {}".format(entry1.get()))
root = tk.Tk()
my_gui = ClassA(root)
print("[Outside call], it is: {}".format(ClassA.var1.get()))
tk.mainloop()