win.py 1.5 KB

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