Как устранить ошибку tkinter "pyimage4" для функции? - PullRequest
0 голосов
/ 07 декабря 2018

Я пишу приложение, в котором есть функция, которая берет кадры, снятые камерой, и передает их в окно каждые 15 мс, а также другую функцию, которая берет изображение из первой функции, обрезает изображение и передает его вотдельное окно каждые 1500 мсЭти две функции выполняются одновременно через multiprocessing пакет

Код выглядит так:

# Imports
from multiprocessing import Process 
import tkinter as tk
import PIL.Image, PIL.ImageTk

from .VideoCapture_old import VideoCapture # video feed func
from .Plots import Plots # image crop function

# Application
class App:
    def __init__(self):

        # Initialising live stream window
        self.stream_window = tk.Tk()
        self.live_canvas = tk.Canvas(self.stream_window)
        self.live_canvas.pack()

        # Initialising window for cropped screen
        self.analyse_window = tk.Tk()
        self.crop_canvas = tk.Canvas(self.analyse_window)
        self.crop_canvas.pack()

        # Initialise camera
        self.vid = VideoCapture() #secondary script not shown here

        # Initialise cropping function
        self.plot = Plots() #secondary script not shown here

        # Setting up multiprocessing
        p1 = Process(target=self.update_feed())
        p2 = Process(target=self.update_plots())

        self.stream_window.mainloop()
        self.analyse_window.mainloop()

    def update_feed(self): #updates the live stream window
        frame = self.vid.get_frame() #gets frame video object
        self.photo = PIL.ImageTk.PhotoImage(image = PIL.Image.fromarray(frame)
        self.live_canvas.create_image(0, 0, image = self.photo, anchor = tk.NW)
        self.stream_window.after(15, self.update_feed) #15 ms delay

    def update_plots(self): #updates the crop image window
        cropFrame = self.plot(self.vid.get_frame()) #gets frame from video object and crops the frame
        cropFrame_img = PIL.ImageTk.PhotoImage(image = PIL.Image.fromarray(cropFrame)
        self.canvas_color.create_image(0, 0, image = cropFrame_img, anchor = tk.NW)
        self.stream_window.after(1500, self.update_plots) #1500 ms delay

Когда я создаю объект приложения;эффективно выполняя приведенный выше код, я получаю следующую ошибку:

  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 2293, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: image "pyimage4" doesn't exist

Я знаю, что это ошибка, связанная с тем, что tkinter не может правильно обрабатывать фотографии.Решение, предложенное effbot , требует использования метки и дополнительной ссылки, чтобы python не удалял изображение.

В этом конкретном случае как мне создать дополнительную ссылку?

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