fbt_djh 2022-05-12 22:25 采纳率: 40%
浏览 689
已结题

python pyqt5点击GUI上按钮后窗口关闭,但是后台继续执行脚本命名

需求:
1.在GUI窗体上选择文件,
2.点击取消按钮或点击GUI窗体顶部的X,GUI窗口关闭,退出整个程序
3.点击确定按钮,GUI窗口关闭,后台继续解析选择的文件等一系列操作

目前问题:
点击确定后,GUI窗体没有立即关闭,而是等后面所有脚本执行完才关闭的窗口,请问大家谁知道这是怎么回事,帮忙指点下。

GUI:

img

import sys
import time
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets
from functools import partial

def data_analysis_mock(file):
    print(f"GUI窗口关闭了,我在命令行执行数据分析:{file}。。。。。。")
    time.sleep(8)

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500,500)
        self.setWindowTitle('测试')

        #显示文件路径LineEdit
        self.filepathlabel1 = QtWidgets.QLineEdit(self)
        self.filepathlabel1.resize(300, 30)
        self.filepathlabel1.setReadOnly(True)
        self.filepathlabel1.move(60, 60)
        """选择按钮"""
        selectfileBtn1 = QtWidgets.QPushButton(self)
        selectfileBtn1.setText("选择文件")
        selectfileBtn1.resize(120, 30)
        selectfileBtn1.move(370,60 )
        selectfileBtn1.clicked.connect(partial(self.file,self.filepathlabel1))
        """取消按钮"""
        cancelBtn = QtWidgets.QPushButton(self)
        cancelBtn.setText("取消")
        cancelBtn.resize(100, 50)
        cancelBtn.move(60, 200)
        cancelBtn.clicked.connect(self.click_cancle)
        """确认按钮"""
        confirmBtn = QtWidgets.QPushButton(self)
        confirmBtn.setText("确认")
        confirmBtn.resize(100, 50)
        confirmBtn.move(200, 200)
        confirmBtn.clicked.connect(self.click_confirmBtn)

    #浏览文件dialog
    def file(self,pathlabel):
        filename = QFileDialog.getOpenFileNames(self, '选择test_result文件', "/", "XML Files(*.xml)")
        if len(filename[0])>0:
            pathlabel.setText(filename[0][0])

    def click_cancle(self):
        app = QApplication.instance()
        print("您选择了退出程序")
        # 退出应用程序
        app.quit()

    #点击确认按钮的槽函数
    def click_confirmBtn(self):
        app = QApplication.instance()
        # 退出应用程序
        app.quit()
        print("退出GUI,继续执行数据分析脚本。。。。")
        data_analysis_mock(self.filepathlabel1.text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())

  • 写回答

1条回答 默认 最新

  • 二九筒 2022-05-14 13:51
    关注

    关不掉是因为你在quit(0后面又在调用弹窗相关功能导致冲突,当你把quit()后面的函数去掉就可以关掉,这儿直接用close()关

    
    import sys
    import time
    from PyQt5.QtWidgets import *
    from PyQt5 import QtWidgets
    from functools import partial
    
    
    def data_analysis_mock(file):
        print(f"GUI窗口关闭了,我在命令行执行数据分析:{file}。。。。。。")
        time.sleep(8)
    
    
    class MyWindow(QWidget):
        def __init__(self):
            super().__init__()
            self.resize(500, 500)
            self.setWindowTitle('测试')
    
            # 显示文件路径LineEdit
            self.filepathlabel1 = QtWidgets.QLineEdit(self)
            self.filepathlabel1.resize(300, 30)
            self.filepathlabel1.setReadOnly(True)
            self.filepathlabel1.move(60, 60)
            """选择按钮"""
            selectfileBtn1 = QtWidgets.QPushButton(self)
            selectfileBtn1.setText("选择文件")
            selectfileBtn1.resize(120, 30)
            selectfileBtn1.move(370, 60)
            selectfileBtn1.clicked.connect(partial(self.file, self.filepathlabel1))
            """取消按钮"""
            cancelBtn = QtWidgets.QPushButton(self)
            cancelBtn.setText("取消")
            cancelBtn.resize(100, 50)
            cancelBtn.move(60, 200)
            cancelBtn.clicked.connect(self.click_cancle)
            """确认按钮"""
            confirmBtn = QtWidgets.QPushButton(self)
            confirmBtn.setText("确认")
            confirmBtn.resize(100, 50)
            confirmBtn.move(200, 200)
            confirmBtn.clicked.connect(self.click_confirmBtn)
    
        # 浏览文件dialog
        def file(self, pathlabel):
            filename = QFileDialog.getOpenFileNames(self, '选择test_result文件', "/", "XML Files(*.xml)")
            if len(filename[0]) > 0:
                pathlabel.setText(filename[0][0])
    
        def click_cancle(self):
            print("您选择了退出程序")
            # 退出应用程序
            self.close() #继承自qt5内置函数close,关闭窗口
    
        # 点击确认按钮的槽函数
        def click_confirmBtn(self):
            # 退出应用程序
            self.close()
            print("退出GUI,继续执行数据分析脚本。。。。")
            data_analysis_mock(self.filepathlabel1.text())
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = MyWindow()
        w.show()
        sys.exit(app.exec_())
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 5月12日

悬赏问题

  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝