程序运行提示AttributeError: 'MyWindow' object has no attribute 'image_thread',优化程序def open(self): self.profile = self.pipeline.start(self.config) self.is_camera_opened = True self.label.setText('相机已打开') self.label.setStyleSheet('color:green') self.open_btn.setEnabled(False) self.close_btn.setEnabled(True) # 启动 ImageThread self.image_thread = ImageThread(self.pipeline, self.color_label, self.depth_label, self.interval, self.color_photo_dir, self.depth_photo_dir, self._dgl) self.image_thread.saved_color_photos_signal.connect(self.update_saved_color_photos_label) self.image_thread.saved_depth_photos_signal.connect(self.update_saved_depth_photos_label) self.image_thread.start() def close(self): self.image_thread.stop() self.pipeline.stop() self.is_camera_opened = False self.label.setText('相机未打开') self.label.setStyleSheet('color:red') self.open_btn.setEnabled(True) self.close_btn.setEnabled(False) print("已保存color_image的数量是:%d" % self.saved_color_photos) print("已保存depth_image的数量是:%d" % self.saved_depth_photos) self.hide() # 将窗口隐藏,而非退出程序
时间: 2024-01-30 09:04:18 浏览: 36
这个错误的原因是 `MyWindow` 对象没有 `image_thread` 属性,可能是因为在 `open` 方法中出现了异常导致 `image_thread` 没有被创建。你可以在 `MyWindow` 类的构造函数中初始化 `image_thread` 属性为 None,然后在 `close` 方法中检查 `image_thread` 是否为 None,如果不是,则调用 `stop` 方法停止线程。这样可以避免在 `close` 方法中调用不存在的属性而导致异常。
优化后的代码:
```python
class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.setupUi(self)
self.image_thread = None
def open(self):
try:
self.profile = self.pipeline.start(self.config)
self.is_camera_opened = True
self.label.setText('相机已打开')
self.label.setStyleSheet('color:green')
self.open_btn.setEnabled(False)
self.close_btn.setEnabled(True)
# 启动 ImageThread
self.image_thread = ImageThread(self.pipeline, self.color_label, self.depth_label, self.interval,
self.color_photo_dir, self.depth_photo_dir, self._dgl)
self.image_thread.saved_color_photos_signal.connect(self.update_saved_color_photos_label)
self.image_thread.saved_depth_photos_signal.connect(self.update_saved_depth_photos_label)
self.image_thread.start()
except Exception as e:
print(e)
def close(self):
if self.image_thread is not None:
self.image_thread.stop()
self.pipeline.stop()
self.is_camera_opened = False
self.label.setText('相机未打开')
self.label.setStyleSheet('color:red')
print("已保存color_image的数量是:%d" % self.saved_color_photos)
print("已保存depth_image的数量是:%d" % self.saved_depth_photos)
self.hide() # 将窗口隐藏,而非退出程序
```