Изображение tkinter не найдено при нажатии кнопки - PullRequest
0 голосов
/ 08 марта 2020

У меня есть экземпляр кнопки, которая использует два изображения для представления двухходового клапана во включенном или выключенном состоянии.

Путь для обоих изображений работает, потому что я могу инициализировать кнопку с любым изображением.

Я сделал ссылки на оба изображения и сделал переменные глобальными, и я все еще получаю "_tkinter.TclError: image" 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
>>> 

Чего мне не хватает? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 08 марта 2020

Давайте посмотрим на этот код:

ValveA['image'] = 'vbon'

Он не делает то, что вы думаете, он делает. Он пытается установить для параметра image четырехбайтовую строку"vbon". Там нет изображения с этим как имя.

Вот как вы должны ссылаться на изображение:

ValveA['image'] = vbon

FWIW, vboncopy и vboffcopy не копии - они просто разные ссылки на одно и то же изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...