应用场景
- 使用QLabel显示深度摄像头图像,点击图像返回二维坐标,根据坐标计算深度
开发流程
1. 重写QLabel子类
from PySide2.QtWidgets import QApplication, QWidget, QLabel
class CameraViewer(QLabel):
# 创建内部属性sig保存信号
sig = None
# 用来将信号设置为内部属性
def setSig(self, sig):
self.sig = sig
# 鼠标点击事件
def mousePressEvent(self, event):
# 内部信号emit内容,event.pos()返回类型为QPoint
self.sig.emit(event.pos())
2. 定义信号
在应用主类内部添加信号
from PySide2.QtCore import Signal, QPoint
class main(QWidget):
# 创建信号,信号传递类型为QPoint
mouse_pos_signal = Signal(QPoint)
3. 调用该子类
在load_ui函数创建该子类
from PySide2.QtCore import QFile, Signal, Slot, QPoint
from PySide2.QtUiTools import QUiLoader
def load_ui(self):
loader = QUiLoader()
path = os.fspath(Path(__file__).resolve().parent / "form.ui")
ui_file = QFile(path)
ui_file.open(QFile.ReadOnly)
self.ui = loader.load(ui_file, self)
# 定义摄像头viewer
self.ui.camera_viewer = CameraViewer()
# 设置信号
self.ui.camera_viewer.setSig(self.mouse_pos_signal)
# 设置定位
self.ui.camera_viewer.setGeometry(10, 20, 640, 480)
# 设置黑色背景
self.ui.camera_viewer.setStyleSheet(u"background:rgb(0, 0, 0);")
ui_file.close()
4. 将信号绑定槽函数
定义一个函数widget_setting专门用于管理信号与槽的绑定
# 定义槽函数
def click(self):
# 根据自己的业务逻辑编写
def widget_setting(self):
# 绑定信号与槽函数
self.mouse_pos_signal.connect(self.click)
最后在主函数调用widget_setting函数
if __name__ == "__main__":
app = QApplication([])
widget = main()
widget.widget_setting()
widget.show()
sys.exit(app.exec_())