Pyqt Pyside学习笔记

这两个其实差不多,但是我学的是Pyside

主要的教程来自于Github某大佬

期间踩过的坑:

1、无法直接打开.jpg格式的图片,需要借助opencv,注意这不是我程序的问题,这是Pyside一直以来的BUG,解决代码如下:

# 传进来的是图片的绝对路径
def direct_show_image(img):
    # 使用Qt自带的图像格式读取
    cv_img = img
    cv_img = cv2.imread(cv_img, -1)
    height, width, channel = cv_img.shape
    bytesPerline = 3 * width
    qImg = QImage(cv_img.data, width, height, bytesPerline, QImage.Format_RGB888).rgbSwapped()
    # 缩放以适应窗口大小,由于label.size()包含了显示区域和边界,因此要减去两边各1像素的边界
    pixmap = QPixmap.fromImage(qImg)
    # window是是实例化之后主窗口的名称
    pixmap = pixmap.scaled(window.label.size() - QSize(2, 2)) # 保证图片大小适应窗口
    # 在label上显示图像
    window.label.setPixmap(pixmap)

2、信号的使用
主线程会一直进行下去,但是有时候比如需要当某个任务处理完毕后自动播放视频,就需要在这个任务结束后告诉主程序进行某个操作(执行某个函数),主线程又不能一直监视某个变量是否发生改变,只能是发出一个信号提醒主线程,这个概念非常重要,它决定了整个窗口是否会流畅的运行!
信号(Signal),是pyqt(pyside)专门用来处理这个问题的类,要想进行这种操作,自己需要定义一个专门用来发送信号的类,这个类需要继承Signal,而且这个自定义的类是全局的,你在任何地方都可以使用emit()方法来发送这个信号

# 自定义信号源对象类型,用来感知yolo处理的状态
class MySignals(QObject):
    # emit(0)表示是视频,1 表示是图片
    yolo_state = Signal(int)


_state = MySignals()
# 在主窗口里面调用
 # 定义一个信号,用来判断yolo是否处理完毕
  _state.yolo_state.connect(self.check_video_image) # 绑定函数
  _state.yolo_state.emit(kind) #发出信号,就会调用这个函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值