【发布时间】:2020-03-29 13:52:15
【问题描述】:
目前我遍历图像名称列表并将它们变成 tkinter PhotoImage。使用 vars()[var] 从列表中以它们各自的名称将它们保存为变量。 在这种情况下 vars()[var] 表示列表中项目的值,使其成为图像的变量名称。
示例如下:
list = ["a","b","c","d"] #and so on...
image_id = []
for x in range((len)list):
var = list[x]
vars()[var] = tk.PhotoImage(file = var + ".gif")
image_id.append(vars()[var]) #this adds the identity of all photoimages to a list for later use
根据我的测试,只要图像在同一个函数中,我就可以通过变量名称或身份使用图像。这是由于变量是局部的。 问题是,即使图像标识在列表中,它们在原始函数之外使用时也不起作用。我相信这是因为图像与它们的变量名相关联,并且因为这些都是本地 tkinter 垃圾收集它们,导致我的错误是“pyimagenumber 不存在”。这是因为 tkinter 图像的标识只是“pyimage”及其对应的数字。我的思路是,我想让所有存储图像的变量名称都是全局的,而不需要每个图像额外的一行,因为这违背了使用循环和列表的目的。有什么办法可以将“vars()[var]”设置为全局的,同时也给它一个值?
对于任何解决方案,我都希望避免根本性的改变或使用枕头。 任何帮助表示赞赏,如果您对上下文有其他疑问,请询问!
【问题讨论】:
标签: python-3.x tkinter