将字符串更改为现有变量名称以为多个变量创建1个函数(内部类,使用Tkinter中的root)

时间:2016-10-06 14:42:27

标签: python string variables tkinter tkinter-canvas

from tkinter import *

class App:

    def __init__(self, master):

        frame = Frame(master)
        frame.pack()
        self.plot = Canvas(master, width=500, height=120)
        self.plot.pack()

        self.1 = self.plot.create_text(10,10, text = "0")
        self.2 = self.plot.create_text(30,10, text = "0")
        self.3 = self.plot.create_text(50,10, text = "0")

        def txt_change(self,name,value):
            self.plot.itemconfigure(self.name, text=value)

所以在这里我想创建一个可以通过包含名称来改变多个变量值的函数。这个名称是一个字符串,但我希望python将字符串解释为变量名。我有20个这样的变量,为每个变量创建一个新函数并不是很干净。有一种聪明的方法吗?

我希望最终我可以使用这样的东西:txt_change(" 1",20)

3 个答案:

答案 0 :(得分:1)

这在python中称为setattr()

>>> a = App(...)
>>> setattr(a, "name", "foo")
>>> a.name
"foo"

答案 1 :(得分:0)

使用setattr()在您的班级中创建一个函数:

def update_property(self, name, value):
    self.setattr(name, value)

此处,name是班级peopertyvalue是您要为previosu属性设置的值

答案 2 :(得分:0)

正确的解决方案不是将字符串转换为变量名。而是将项目存储在列表或字典中。

例如,这使用字典:

class App:
    def __init__(self, master):
        ...
        self.items = {}
        self.items[1] = self.plot.create_text(10,10, text = "0")
        self.items[2] = self.plot.create_text(30,10, text = "0")
        self.items[3] = self.plot.create_text(50,10, text = "0")

    def txt_change(self,name,value):
        item_id = self.items[name]
        self.plot.itemconfigure(item_id, text=value)

...
app=App(...)
app.txt_change(2, "this is the new text")