win.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from PyQt5.QtWidgets import QDialog
  2. from PyQt5.QtGui import QImage
  3. from PyQt5.QtGui import QPixmap
  4. # 引入
  5. from ui.traffic_ui import Ui_Dialog
  6. from dev.camera import CameraDev
  7. class Win(QDialog): #扩展QDialog(新增,覆盖功能)
  8. def __init__(self): # 实现构造器 (完成初始化,数据初始化,功能初始化)
  9. super(Win,self).__init__() #调用父类构造器
  10. # 调用ui
  11. #创建对象
  12. self.ui = Ui_Dialog()
  13. # 关联ui到当前窗体
  14. self.ui.setupUi(self)
  15. # 创建一个设备对象
  16. self.dev = CameraDev()
  17. #启动设备线程工作
  18. self.dev.start()
  19. # 绑定信号与槽。
  20. self.dev.sig_video.connect(self.showVideo)
  21. #3,定义槽 (slot) 函数 (Qt技术: 信号与槽),一定与信号同型
  22. def showVideo(self,data, h,w,c):
  23. # print(",h,",w,",",c,")") # python格式字符串
  24. # 1.使用data,h,w,c创建QImage
  25. q_img = QImage(
  26. data, # 图像的字节数组
  27. w, # 图像宽度
  28. h, # 图像高度
  29. w*c, # 图像每行字节数
  30. QImage.Format_BGR888 # 图像格式BGR,每个通道8个bit,1个字节
  31. )
  32. # 2.使用QImage创建QPixmap
  33. pix_img = QPixmap.fromImage(q_img) # 自动从QImage转换为QPixmap,QLabel只支持oPixmap格式
  34. # 3.显示0Label: 1blvideo
  35. self.ui.Yi.setPixmap(pix_img)
  36. # 4. 适当的缩放
  37. self.ui.Yi.setScaledContents(True)
  38. def closeEvent(self,e): # 当窗体关闭前会调用
  39. # 关闭摄像头
  40. # 释放设备
  41. # 停止多任务
  42. self.dev.close()
  43. print("关闭")