存储在变量中时找不到正确的文件

时间:2014-05-08 08:38:26

标签: python variables tkinter

当用户分数直接更改为图像名称时,程序会显示正确的图像。但是当它存储在变量中时,它似乎无法找到图像,即使它打印出正确的图像名称。

import tkinter as tk

window = tk.Tk()
canvas = tk.Canvas(window, width = 400, height = 200, bg = 'white')

_1 = tk.PhotoImage(file= '1.gif')

score = 1
score = str(score)
user_score = '_' + score
print(user_score)
canvas.create_image((200,100), image=user_score)

canvas.pack()
canvas.update()
window.mainloop()

当_1是图像存储的图像时,错误说图像“_1”不存在。 有人请求告诉我如何解决这个问题。 干杯

2 个答案:

答案 0 :(得分:1)

@Ashok建议的eval()方法的替代方法是通过字典访问图像,该字典具有作为键的分数和作为值的图像实例。我假设您没有直接为图像实例传递变量的原因是因为得分可以改变。如果您事先知道分数,则可以使用与此类似的方法:

images = {
    '_1': tk.PhotoImage(file='1.gif'), # score is key, image instance is value
    '_2': tk.PhotoImage(file='2.gif'),
    '_3': tk.PhotoImage(file='3.gif')
    }

score = 1
score = str(score)
user_score = '_' + score
print(user_score)

# set the image to the corresponding dict key
canvas.create_image((200,100), image=images[user_score])

您还可以实现错误处理(如果score4)以处理KeyError,并显示默认图像或根本不显示。

答案 1 :(得分:0)

嘿,看起来你正在使用字符串类型来表示图像。 “实例”应代表图像。

在脚本中使用“canvas.create_image((200,100),image = eval(user_score))”可以解决问题

import tkinter as tk
window = tk.Tk()
canvas = tk.Canvas(window, width = 800, height = 1000, bg = 'white')
_1 = tk.PhotoImage(file= '1.gif')
print type(_1) #This should be an instance i.e here its a tkinter photoimage
score = 1
score = str(score)
user_score = '_' + score
print user_score
print type(user_score) #This should be a string
canvas.create_image((200, 100), image = eval(user_score))
canvas.pack()
canvas.update()
window.mainloop()

#The output of this program should look something like below:
<type 'instance'>
_1
<type 'str'>
And Python tkinter should display a canvas with the image specified

使用eval(string)应该评估定义的字符串的值。但是我们应该谨慎使用eval()函数,因为它盲目地评估整个字符串而不管实际的验证。