Я разрабатываю приложение для камеры в режиме реального времени, где для черчения требуется новая нить.Для этого создается класс потока:
# Create new thread for plotting smoothly
class PlotThread(threading.Thread):
def __init__(self, threadID, fig, ax):
threading.Thread.__init__(self)
self.threadID = threadID
self.fig = fig
self.ax = ax
self.h = None
self.h_raw = None
self.hr_est = None
def update_data(self, h, h_raw, hr_est):
self.h = h
self.h_raw = h_raw
self.hr_est = hr_est
def run(self):
self.ax[0].clear()
self.ax[0].plot(self.h)
self.ax[0].set_title("Filtered signal")
self.ax[0].text(150, .002, '%s bpm' % int(self.hr_est), fontsize=18)
self.ax[0].set_ylim((-0.003, 0.003))
self.ax[1].clear()
self.ax[1].plot(self.h_raw)
self.ax[1].set_title("Raw signal")
plt.pause(0.0000000000001)
И основная программа выглядит так:
fig, ax = plt.subplots(2, 1, figsize=(14, 8))
plt_thread = PlotThread(1, fig, ax)
grabResult = camera.RetrieveResult()
while camera.IsGrabbing():
if grabResult.GrabSucceeded():
# Access the image data
image = converter.Convert(grabResult)
frame = image.GetArray()
h, h_raw, hr_est = core.signal_combination(image)
plt_thread.update_data(h, h_raw, hr_est)
plt_thread.start()
В этом случае трудоемкий график не завершает программу, и камера можетначать захват следующего кадра - в результате стабильная частота кадров.
Я получаю следующее сообщение об ошибке:
QObject::setParent: Cannot set parent, new parent is in a different thread
QObject::setParent: Cannot set parent, new parent is in a different thread