初学习使用了PySide2 ,其中遇到了许多的问题,但是在不断努力之中最终还是解决了。来张界面效果图。

其中按键比较多, 按键“打开多个文件”“打开单个文件”就是为了学习读取文件添加的没有实际功能,该按键返回文件路径。

1、Qt界面制作

  包含 QLabel QPushButton 上面的其实是一个放大了的Label标签,名字为空,下面为按键。

2 、图像的读取转换

2.1 文件读取

FileDialog = QFileDialog(self.pushButton_2)
# 设置可以打开任何文件
FileDialog.setFileMode(QFileDialog.AnyFile)
# 文件过滤
Filter = "(*.jpg,*.png,*.jpeg,*.bmp,*.gif)|*.jgp;*.png;*.jpeg;*.bmp;*.gif|All files(*.*)|*.*"
image_file, _ = FileDialog.getOpenFileName(self.pushButton_2,'open file','./','Image files (*.jpg *.gif *.png *.jpeg)')  # 选择目录,返回选中的路径 'Image files (*.jpg *.gif *.png *.jpeg)'
# 判断是否正确打开文件
if not image_file:
    QMessageBox.warning(self.pushButton_2, "警告", "文件错误或打开文件失败!", QMessageBox.Yes)
    return

print("读入文件成功")
print(image_file)    #   默认打开当前路径   输出文件路径

2.2 图像转换

  PySide2 中QLabel类可以显示文字和图片。利用QFileDialog.getOpenFileName()类读取文件路径,在利于cv2把视频按帧读取,本来想利于cv2播放,但是速度有点快,最后选择了QLabel加Timer播放。QLabel显示的格式必须是Qimage,但是用cv2读取的帧格式是numpy array,必须把它转换成为Qimage。

# 读取一帧
        success, frame = self.cap.read()
        if success:
            # Mat格式图像转Qt中图像的方法
            show = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            showImage = QImage(show.data, show.shape[1], show.shape[0], QImage.Format_RGB888)
            gui.label.setPixmap(QPixmap.fromImage(showImage))
            gui.label.setScaledContents(True)  # 让图片自适应 label 大小

3 、主函数代码

  本来想使用动态加载UI文件,但是后来发现,如果在一个类里面使用起来还是比较方便的,如果在另一个里面调用效果不是太好,所有直接选择了加载py文件。

import sys
from PySide2.QtWidgets import QApplication, QMessageBox,QFileDialog,QMainWindow
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import Qt,QDir, QTimer
from PySide2.QtGui import QPixmap,QImage
from UI_QLabel import Ui_mainWindow
import cv2

class LoginGUI(QMainWindow, Ui_mainWindow):
    def __init__(self):
        super(LoginGUI, self).__init__() #调用父类
        self.setupUi(self)
        # super().__init__()
        # # 从文件中加载UI定义
        # self.ui = QUiLoader().load('UI_QLabel.ui')
        # 打开文件类型,用于类的定义
        self.f_type = 0

    def window_init(self):
        # label 风格设置
        self.label.setStyleSheet('''background: rgba(177, 177, 177, 0.8);
                               font-family: YouYuan;
                               font-size: 12pt;
                               color: white;
                               ''')
        self.label.setAlignment(Qt.AlignCenter)  # 设置字体居中现实
        self.label.setText("Moonbaem 小先生")  # 默认显示文字
        # self.ui.label.setPixmap("login.jpg")  ##输入为图片路径,比如当前文件内的logo.png图片
        # self.ui.label.setFixedSize(200, 200)  # 设置显示固定尺寸,可以根据图片的像素长宽来设置
        # self.ui.label.setScaledContents(True)  # 让图片自适应 label 大小

        self.pushButton.</