我有一个按钮实例,该实例使用两个图像表示处于打开或关闭状态的2通阀。
两个图像的路径都可以使用,因为我可以使用任一图像初始化按钮。
我已经引用了这两个图像并将变量设置为全局变量,但仍然得到“ _tkinter.TclError:图像” vbon“不存在”
这是代码:
from tkinter import *
from PIL import Image, ImageTk
toggleA = 0
global vboncopy, vboffcopy, vbon, vboff
root = Tk()
root.title("ICP")
root.geometry('200x125')
def valve_A():
global toggleA
if toggleA == 0:
toggleA = 1
#vbon = ImageTk.PhotoImage(Image.open("/home/pi/mu_code/images/Black80x40VbuttonON.jpg"), master=root)
ValveA['image'] = 'vbon'
#ValveA.configure(image='vbon')
#ValveA = Button(root, image=vbon, command = valve_A())
else:
toggleA = 0
#vboff = ImageTk.PhotoImage(Image.open("/home/pi/mu_code/images/Black80x40VbuttonOFF.jpg"), master=root)
ValveA['image'] = 'vboff'
#ValveA.configure(image='vboff')
#ValveA = Button(root, image=vboff, command = valve_A())
global vboncopy, vboffcopy, vbon, vboff
vbon = ImageTk.PhotoImage(Image.open("/home/pi/mu_code/images/Black80x40VbuttonON.jpg"), master=root)
vboncopy = vbon
vboff = ImageTk.PhotoImage(Image.open("/home/pi/mu_code/images/Black80x40VbuttonOFF.jpg"), master=root)
vboffcopy = vboff
ValveA = Button(root, bd= -2, image=vboff, command = lambda: valve_A())
ValveA.grid(row=0, column=0, padx='12',pady='5')
root.mainloop()
这是完整的错误消息:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "/home/pi/mu_code/StackOverflow.py", line 31, in <lambda>
ValveA = Button(root, bd= -2, image=vboff, command = lambda: valve_A())
File "/home/pi/mu_code/StackOverflow.py", line 15, in valve_A
ValveA['image'] = 'vbon'
File "/usr/lib/python3.7/tkinter/__init__.py", line 1492, in __setitem__
self.configure({key: value})
File "/usr/lib/python3.7/tkinter/__init__.py", line 1485, in configure
return self._configure('configure', cnf, kw)
File "/usr/lib/python3.7/tkinter/__init__.py", line 1476, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: image "vbon" doesn't exist
Traceback (most recent call last):
File "/home/pi/mu_code/StackOverflow.py", line 34, in <module>
root.mainloop()
File "/usr/lib/python3.7/tkinter/__init__.py", line 1283, in mainloop
self.tk.mainloop(n)
KeyboardInterrupt
>>>
我想念什么?请帮忙。
答案 0 :(得分:0)
让我们看一下这段代码:
ValveA['image'] = 'vbon'
它没有按照您认为的去做。它正在尝试将image
选项设置为四字节的 string “ vbon”。没有图像以该图像为名称。
这是您应参考图像的方式:
ValveA['image'] = vbon
FWIW,vboncopy
和vboffcopy
不是副本-它们只是同一张图片的不同引用。