python define全局_如何将tkinter变量定义为全局变量?(How to define a tkinter variable as global?)...

如何将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/_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值