我知道这样的问题一直都会被问到,但要么我无法找到我需要的答案,要么就是在我做的时候我无法理解它。
我希望能够做到这样的事情:
spam = StringVar()
spam.set(aValue)
class MyScale(Scale):
def __init__(self,var,*args,**kwargs):
Scale.__init__(self,*args,**kwargs)
self.bind("<ButtonRelease-1>",self.getValue)
self.set(var.get())
def getValue(self,event):
## spam gets changed to the new value set
## by the user manipulating the scale
var.set(self.get)
eggs = MyScale(spam,*args,**kwargs)
eggs.pack()
当然,我回来了“NameError:未定义全局名称'var'。”
如何解决无法将参数传递给getValue的问题?我被警告不要使用全局变量,但这是我唯一的选择吗?它是否为我想要更改的每个变量设置一个单独的比例类?我感觉我错过了我的鼻子下面的东西......
编辑: 这是你的意思吗?
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\...\interface.py", line 70, in getValue
var.set(self.get)
NameError: global name 'var' is not defined
对不起,我只编了一个月的时间,而且一些行话仍然让我感到厌烦。
答案 0 :(得分:2)
请试一试。
很多示例代码都慷慨地使用全局变量,就像你的“var”变量一样。
我已经使用var参数作为指向原始垃圾邮件对象的指针;分配给MyScale类中的self.var_pointer。
下面的代码会在比例尺的ButtonRelease上更改'spam'(和'eggs')的值。
您可以通过输入eggs.get()或spam.get()来查看值,以查看更改后的值。
from Tkinter import *
root = Tk()
aValue = "5"
spam = StringVar()
spam.set(aValue)
class MyScale(Scale):
def __init__(self,var,*args,**kwargs):
self.var_pointer = var
Scale.__init__(self,*args,**kwargs)
self.bind("<ButtonRelease-1>",self.getValue)
self.set(var.get())
def getValue(self,event):
## spam gets changed to the new value set
## by the user manipulating the scale
self.var_pointer.set(self.get())
eggs = MyScale(spam)
eggs.pack(anchor=CENTER)
答案 1 :(得分:1)
让我们来看看这个方法函数
def getValue(self,event):
## spam gets changed to the new value set
## by the user manipulating the scale
var.set(self.get)
var.set(self.get)
行只有两个可用的局部变量:
self
event
变量var
不是此方法函数的本地变量。也许它在类或脚本的其他地方使用过,但它不是本地的。
它可能是全球性的,但这是一种不好的做法。
我不确定为什么你会认为变量var
在这种情况下是已知的。