Tkinter:更改函数中的变量

2024-09-27 17:55:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这类问题一直被问到,但要么我无法找到我需要的答案,要么我一直无法理解。在

我想做些类似的事情:

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:global name'var'is not defined.”(名称错误:未定义全局名称'var')

如何避免无法将参数传递给getValue?有人警告我不要使用全局变量,但这是我唯一的选择吗?它是否为我要更改的每个变量设置一个单独的刻度类?我有种感觉我错过了我眼皮底下的东西。。。在

编辑: 这是你的意思吗?在

^{pr2}$

对不起,我只编了一个月的程序,有些行话我还是不懂。在


Tags: theself名称getinitvardefargs
2条回答

让我们看看这个方法函数

    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在这个上下文中是已知的。在

请试一试。在

很多示例代码都慷慨地使用全局变量,比如您的“var”变量。在

我使用了您的var参数作为指向原始垃圾邮件对象的指针;分配给self.var_指针在MyScale类中。在

下面的代码将更改秤按钮释放上的“垃圾邮件”(和“鸡蛋”)的值。在

您可以通过键入鸡蛋。得到()或垃圾邮件.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)

相关问题 更多 >

    热门问题