Я пишу приложение, в котором есть функция, которая берет кадры, снятые камерой, и передает их в окно каждые 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 не удалял изображение.
В этом конкретном случае как мне создать дополнительную ссылку?