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

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 UE5样条线生成的网格UV问题
  • ¥15 如何用最短的时间大致看懂springboot+vue的项目
  • ¥15 (有偿)懂数值分析和含时变参数微分方程的来
  • ¥15 layui父页的数据表格如何用弹窗页提交后的查询数据来更新数据表格内容?
  • ¥15 abaqus随机生成二维颗粒
  • ¥15 安装ansys许可证管理器时出现了这个问题,如何解决?
  • ¥100 高价求算法,利用智能手机传感器计算车辆的三轴g值
  • ¥15 Blazor server 数据库操作异常,如何解决?(语言-c#)
  • ¥15 uni-app开发APP运行到浏览器访问接口跨域
  • ¥100 mfc消息自创建控件