学习记录Day8-打开文件界面&报错集锦

实现功能:

学习资源:【[Pyqt]给python添加一个可视化界面(二)-哔哩哔哩】https://b23.tv/U7fSNq1

使用python将图片展示在界面的label中:

  1. 增加了label作为显示图像的控件
  2. python功能代码添加了打开文件选择对话框的程序,实现点击按钮在对话框中可选择用来显示的图像文件
  3. 加入了针对qt的label控件显示图像的转换函数

报错1:NameError: name ‘QFileDialog‘ is not defined

错误原因:QFileDialog是在QtWidgets module

解决方法:需要在QFileDialog前加上QtWidgets

    #选择且获取图片文件地址
    def writeline(self):
        fileName, filetype = QtWidgets.QFileDialog.getOpenFileName(
            None,
            "选取文件",
            "C:/",
            "Image Files (*.bmp *.jpg *.jpeg *.png)")
        self.showFile(fileName)

报错2:NameError: name 'cv2' is not defined

解决方法:按照学习记录Day1中总结的,下载cv2模块

(9条消息) 学习记录Day1-Python GUI设计PyQt5从入门到实践_li_s_t的博客-CSDN博客

报错3:No matching distribution found for cv2

错误原因:安装的时候包名不是cv2

解决方法:修改安装命令↓↓↓

pip install opencv_python -i https://pypi.douban.com/simple


报错4:NameError: name 'cv2' is not defined

报错5:NameError: name ‘numpy’ is not defined

报错原因:确认两个模块都已经下载成功后,仍然报错~可能是使用了cv2/numpy模块中的函数,但没有导入cv2/numpy

解决方法:在调用的函数前,导入模块cv2/numpy

import sys,cv2,numpy
from PyQt5 import QtCore, QtGui, QtWidgets

报错6:ERROR: No matching distribution found for numpy

报错原因:在安装numpy时,出现报错~说是位于这个镜像上的库不受信任或不安全的主机,将被忽略

解决方法:需要让它受信任,所以将修改代码↓↓↓

pip install numpy -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com


报错7:no matching distribution found for QImage

报错8:NameError: name 'QPixmap' is not defined

报错原因:使用了QImage/QPixmap模块中的函数,但没有导入QImage/QPixmap

解决方法:在调用的函数前,导入模块QImage/QPixmap

import sys,cv2,numpy
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QImage,QPixmap

打开文件界面展示 


附完整代码

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'file.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

import sys,cv2,numpy
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QImage,QPixmap


class Ui_File(object):
    def setupUi(self, File):
        File.setObjectName("File")
        File.resize(1000, 700)
        File.setMaximumSize(QtCore.QSize(1000, 700))
        self.centralwidget = QtWidgets.QWidget(File)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(210, 40, 751, 571))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(60, 120, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(210, 40, 751, 571))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.frame.raise_()
        self.label.raise_()
        self.pushButton.raise_()
        File.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(File)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1000, 22))
        self.menubar.setObjectName("menubar")
        File.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(File)
        self.statusbar.setObjectName("statusbar")
        File.setStatusBar(self.statusbar)

        self.retranslateUi(File)
        QtCore.QMetaObject.connectSlotsByName(File)

    def retranslateUi(self, File):
        _translate = QtCore.QCoreApplication.translate
        File.setWindowTitle(_translate("File", "MainWindow"))
        self.label.setText(_translate("File", "TextLabel"))
        self.pushButton.setText(_translate("File", "打开文件"))

        self.pushButton.clicked.connect(self.writeline)

    #选择且获取图片文件地址
    def writeline(self):
        fileName, filetype = QtWidgets.QFileDialog.getOpenFileName(
            None,
            "选取文件",
            "C:/",
            "Image Files (*.bmp *.jpg *.jpeg *.png)")
        self.showFile(fileName)


    # 将图片显示在label
    def showFile(self, fileName):
        srcImage = cv2.imdecode(numpy.fromfile(fileName, dtype=numpy.uint8), -1)
        image_height, image_width, image_depth = srcImage.shape  # 获取图像的高,宽以及深度。
        # opencv读图片是BGR,qt显示要RGB,所以需要转换一下
        QImg = cv2.cvtColor(srcImage, cv2.COLOR_BGR2RGB)
        QShowImage = QImage(QImg.data, image_width, image_height,  # 创建QImage格式的图像,并读入图像信息
                            image_width * image_depth,
                            QImage.Format_RGB888)
        self.label.clear()
        QShowImage = QShowImage.scaled(
            self.label.width(),
            self.label.height())  # 图片适应label大小
        self.label.setPixmap(QPixmap.fromImage(QShowImage))


# 主方法
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
    ui = Ui_File() # 创建PyQt5设计的窗体对象
    ui.setupUi(MainWindow) # 调用PyQt5窗体的方法对窗体对象进行初始化设置
    MainWindow.show() # 显示窗体
    sys.exit(app.exec_()) # 程序关闭时退出进程

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值