首页 > 解决方案 > Python,通过字符串更改 var

问题描述

我有多个type1 = Label(image=type_none)并获得一个列表['Ground', 'Rock', 'Water']并想将其更改为

type1 = Label(image=type_Ground)

type2 = Label(image=type_Rock)

type_Rock已经定义,并包含我要显示的数据。

所以我正在寻找一种动态更改变量的方法。像这样的东西。

for i in range(0, len(type_list)):
    type{i} = Label(image=type_{type_list[i]})

最后,它应该更新标签 1 到 X 的图像。我仍然是初学者,无法找到执行此操作的方法。我会发布完整的代码,但它又大又乱。如果您需要知道,我必须将图像定义为self.type_ground = ImageTk.PhotoImage(Image.open("img/Ground.png").resize(self.type_size)) 感谢您花时间阅读我的问题 :)

编辑:感谢您的回答,我最初查看了 eval(),它运行良好,但我遇到了一些问题,因为你们都说这是不好的做法,我现在使用包含变量的 dicts 和列表。

可以像这样轻松创建图像type_img = {"Scaning": ImageTk.PhotoImage(Image.open("img/Scaning.png").resize(type_size))}

但是Tk.Label对象,我需要处理不同的。首先我创建 Label wtype0 = Label(master, image=type_img["None"]),将其放在 Tkinter 中,然后将其存储在列表中type_tklist = [self.wtype0]

然后,当我想更改图像时,我可以简单地

for i in range(0, len(weak1)):
     self.type_tklist[i].configure(image=self.type_img[weak1[i]])
     self.type_tklist[i].image = self.type_img[weak1[i]]

标签: pythontkinter

解决方案


这个有可能...

这是可能的,使用内置函数eval,但这几乎总是一个非常糟糕的主意。无论如何,如果您想这样做,您可以执行以下操作:

for i in range(0, len(type_list)):
    eval('type{} = something'.format(i))

但总有更好的选择

相反,请考虑使用类型列表:

types = []
for i in range(0, len(type_list)):
    types.append(something)

然后您可以访问types[1].

如果您想为不同类型提供更好的“名称”而不仅仅是数字,请考虑使用dict.


推荐阅读