_tkinter。TclError:无法调用"update"命令:pyplot.pause() 上的应用程序已被销毁错误



我正在处理来自arduino的串行数据,并使用opencv2和matplotlib库在python中处理数据。一切都很好,但每次我关闭图形窗口时,我都会出错,而我甚至不使用tkinter库。

Traceback (most recent call last):
File "C:UsersLENOVODocumentsArduinoprojectcoba.py", line 57, in <module>
plt.pause(0.2)
File "C:UsersLENOVOAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibpyplot.py", line 438, in pause
canvas.start_event_loop(interval)
File "C:UsersLENOVOAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibbackend_bases.py", line 2407, in start_event_loop
self.flush_events()
File "C:UsersLENOVOAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibbackends_backend_tk.py", line 390, in flush_events
self._master.update()
File "C:UsersLENOVOAppDataLocalProgramsPythonPython38libtkinter__init__.py", line 1305, in update
self.tk.call('update')
_tkinter.TclError: can't invoke "update" command: application has been destroyed

我甚至不申报tkinter库,

import cv2
import serial
import numpy as np
import matplotlib.pyplot as plt

这里使用matplotlib是为了实时显示摄像机的视频和串行数据输出,当我按下"q"时,应用程序应该关闭。

#create two subplots
ax1 = plt.subplot(1,2,1)
ax2 = plt.subplot(1,2,2)
#create two image plots
im1 = ax1.imshow(grab_frame(video))
im2 = plt.imshow(cap2)
while True:
#read from serial
buffer = port.readline()
temper = buffer.decode('utf-8')
temper = temper.reshape(8,8)

#update data
im1.set_data(grab_frame(video))
im2.set_data(temper)
plt.pause(0.2)
#stopper
key = cv2.waitKey(1)
if(key == ord('q')):
break
plt.show()
video.release()
cv2.destroyAllWindows()

我应该使用tkinter库吗?

我已经尝试了一些方法来克服它,但我仍然不明白tkinter已经做到了什么,但IMO是关于当程序暂停时我无法关闭它。所以,我没有把塞子放在底部,而是把它放在plt.pause()的上方。这个看起来像这样:

#update data
im1.set_data(grab_frame(video))
im2.set_data(temper)
#stopper
key = cv2.waitKey(1)
if(key == ord('q')):
break
plt.pause(0.2)

相关内容

最新更新