当用户分数直接更改为图像名称时,程序会显示正确的图像。但是当它存储在变量中时,它似乎无法找到图像,即使它打印出正确的图像名称。
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”不存在。 有人请求告诉我如何解决这个问题。 干杯
答案 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])
您还可以实现错误处理(如果score
为4
)以处理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()函数,因为它盲目地评估整个字符串而不管实际的验证。