如何将tkinter变量定义为全局变量?(How to define a tkinter variable as global?)
我正在尝试从Entry提取一个整数,并将其存储在python变量中以用于各种函数。 现在我遇到的问题是范围之一,其中IntVar在一个类中声明,而python变量在class A中的另一个方法中声明,调用IntVar将其存储在class A的变量中。
现在我理解为什么 IntVar不被认为是全局的。 但是当我尝试将IntVar放在包含gui的类的任何地方时,它会返回__init__错误并引用tkinter模块中的行。
我也尝试将函数移动到UI类,但这也变得很难看,因为我无法弄清楚如何从__init__方法之外调用它们,并将它们放在其他地方会导致NameError: name 'xxx' is not defined 。
这是一个快速而又脏的模型,用于说明问题:
from tkinter import *
class SampleObj(object):
def __init__(self, pyvar):
self.pyvar = 0
def SampleFunc(self):
self.pyvar = tkvar.get()
self.pyvar += 1
tkvar.set(self.pyvar)
Test = SampleObj(0)
class MainGui:
def __init__(self, master):
self.master = master
self.master.title("I'm a test Gui!")
tkvar = IntVar()
mFrame = Frame(master)
mFrame.pack()
self.Entry = Entry(mFrame, textvariable=tkvar)
self.Entry.pack()
self.Label = Label(mFrame, text=tkvar.get())
self.Label.pack()
tkvar.trace("w", Test.SampleFunc())
root = Tk()
my_gui = MainGui(root)
root.mainloop()
如上所述,我已经尝试过相当多的东西,在我认为会扩大其范围的地方声明IntVar ,但每次它都是“未定义”或变量未在根目录中初始化的问题(I认为这是另一个错误的意思,无论如何)。
我现在用Google搜索了大约四个小时,但没有找到任何解决方案。 我还咨询了其他人,我会考虑使用Python中间件(与我相比作为新手),他们不知道该告诉我什么,除了它显然是范围问题(我已经知道)。 因此,任何帮助我指向正确方向的人都将不胜感激。
编辑:根据要求提供回溯。
代码原样出错:
Traceback (most recent call last):
File "REDACTED", line 34, in
my_gui = MainGui(root)
File "REDACTED", line 30, in __init__
tkvar.trace("w", Test.Magic())
File "REDACTED", line 8, in Magic
self.pyvar = tkvar.get()
NameError: name 'tkvar' is not defined
当我尝试将tkvar = IntVar()向上移动到所有类之外时出错:
Traceback (most recent call last):
File "REDACTED", line 3, in
tkvar = IntVar()
File "/home/redacted/apps/thonny/lib/python3.5/tkinter/__init__.py", line 351, in __init__
Variable.__init__(self, master, value, name)
File "/home/redacted/apps/thonny/lib/python3.5/tkinter/_