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 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!