哼º 2023-06-14 19:50 采纳率: 78.6%
浏览 12

Pyqt5制作界面时出现问题

最近使用Pyqt5制作目标检测的ui界面时,想着增加一个运行等待的图片
但是增加后发现打开界面后第一次检测运行完全正常:输入数值点击开始检测——等待图片——显示运行结果
然后重新输入另一张图片再运行就会在出现:输入数值点击开始检测——等待图片——显示运行结果——等待图片——显示运行结果
不知道为什么会重复两次,虽然也有点怀疑是不是逻辑上有问题,但是没找到问题出在哪
完整代码如下:

class CamShow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(CamShow, self).__init__(parent)
        self.setupUi(self)
        self.fileBtn.clicked.connect(self.loadImage)
        self.fileBtn_2.clicked.connect(self.jinzhi)
        self.scale = 1

    def jinzhi(self):
        self.Infolabel_2.setText('未输入图像有效路径')

    # 打开文件功能
    def loadImage(self):
        self.fname, _ = QFileDialog.getOpenFileName(self, '请选择图片', '.', '图像文件(*.jpg *.jpeg *.png)')
        if self.fname:
            self.Infolabel_2.setText('文件打开成功\n' + self.fname)
            jpg = QtGui.QPixmap(self.fname).scaled(self.Imglabel_0.width(), self.Imglabel_0.height())
            self.Imglabel_0.setPixmap(jpg)
            # 开启检测按钮
            self.fileBtn_2.clicked.connect(self.jiance)


        else:
            # print("打开文件失败")
            self.Infolabel_2.setText('打开文件失败')
            self.Imglabel_0.setPixmap(QPixmap(""))

    def jiance(self):
        thresh = self.lineEdit_X.text()
        if self.fname:
            if thresh:
                thresh = int(thresh)
                self.Infolabel_2.setText(' ')

                #等待图片(问题就出在这里好像)
                splash = QSplashScreen(QPixmap("./jiemian/load.jpg"))
                splash.setFont(QFont('Microsoft YaHei UI', 12))
                splash.show()
                splash.showMessage("正在检测,请稍等……0%", QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black)
                time.sleep(2.0)  # 模拟运算的时间
                splash.showMessage("正在检测,请稍等……30%", QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black)
                time.sleep(3.0)  # 模拟运算的时间
                splash.showMessage("正在检测,请稍等……60%", QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black)
                time.sleep(2.0)  # 模拟运算的时间
                splash.showMessage("正在检测,请稍等……100%", QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black)

                str_all = predict.predict_single_person(self.fname, thresh)
                self.Infolabel.setText(str(str_all))
                # 输出结果图片
                img = QtGui.QPixmap('test_result3.jpg').scaled(self.Imglabel.width(), self.Imglabel.height())
                self.Imglabel.setPixmap(img)

                self.Infolabel_2.setText('文件打开成功\n' + self.fname + '\n' + '结果图片保存至./result/image文件夹\n参数保存至./result/data文件夹')

            else:
                self.Infolabel_2.setText('未输入图像阈值')
        else:
            self.fileBtn_2.clicked.connect(self.jinzhi)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    splash = QSplashScreen(QPixmap("./jiemian/waitting.jpg"))
    splash.setFont(QFont('Microsoft YaHei UI', 10))
    splash.show()
    splash.showMessage("程序初始化中... 0%", QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black)
    time.sleep(1.3)  # 模拟运算的时间
    splash.showMessage("加载配置...60%", QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black)
    time.sleep(5.3)  # 模拟运算的时间
    splash.showMessage("加载配置...100%", QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black)

    ui = CamShow()
    ui.show()
    sys.exit(app.exec_())

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-14 22:05
    关注
    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7522532
    • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:PyQt5 自由绘画,支持导入可变大小的图片和保存图片、插入可变矩形、椭圆、箭头,支持文本输入和再编辑,支持图层变动等
    • 除此之外, 这篇博客: PyQt5学习笔记07——面向过程和面向对象的编程过程理解中的 1、面向过程的代码编程方式——类似“顺序结构”控制语句 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • # -*- coding: utf-8 -*-
      """---面向过程的编程方式
      主要特点:所有代码实现过程都是以“顺序控件”方式执行。
                所有的界面和控件都是逐个逐个以代码实现。
      主要缺陷:
           1)代码冗余,且代码杂乱;
           2)代码不宜阅读和修改;
           3)可维护性差,比较复杂;
      面向过程代码实现GUI的步骤:
           1)导入包
           2)创建一个应用程序
           3)控件操作(创建控件、设置控件、添加子控件、其他(信号、事件、槽))
           4)开始执行应用程序,并进入消息循环
      下面是一个面向过程的代码例子:
           创建一个空界面、一个按钮、一个标签等控件。
      --"""
      # 导入需要的包
      from PyQt5.Qt import *
      import sys
      # 1、创建一个应用程序
      app = QApplication(sys.argv)  #创建一个应用程序(比不可少的)
      print(app.arguments())   #打印应用程序信息,及文件名['D:/ProgramFiles64/MyCode_Files/Python+PyQT/Qttest01/顶层控件操作.py']
      #2、控件操作——创建控件,设置控件(大小、位置、样式...),事件,信号的处理
      #2.1 创建控件
      window = QWidget()
      push = QPushButton(window)
      label = QLabel(window)
      label.setText("xxxx")
      
      label1 = QLabel(window)
      label.setText("xxxx")
      
      label2 = QLabel(window)
      label.setText("xxxx")
      
      label3 = QLabel(window)
      label.setText("xxxx")
      
      # 2.2 设置控件
      window.setWindowTitle("创建一个空白窗口")
      window.resize(400,400) #修改窗口大小
      push.setWindowTitle("按钮控件")
      push.setText("创建一个按钮控件")
      label.setWindowTitle("标签控件")
      label.setText("创建一个标签控件!")
      
      
      # 2.3 展示控件
      window.show()
      push.show()
      label.show()
      #开始执行应用程序,并进入消息循环
      sys.exit(app.exec_())
      
    评论

报告相同问题?

问题事件

  • 创建了问题 6月14日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度