如何使用 PythonQt 在 API 中正确关闭 QWidget-window

How to properly close a QWidget-window in an API with PythonQt

我在可视化程序的 API 中使用 Python 2.7。在它的 2016 版本中,我使用 PySide 创建了一个 GUI,它运行良好。现在在他们的新 2017 版本中,他们从 PySide 更改为 PythonQt,因此我的导入和一些命令必须更改,但到目前为止它仍然有效。

但是如果我关闭我的 GUI 并尝试继续工作,例如打开当前或新项目,2017 版本正在退出,有时有,有时没有错误消息,但该消息根本没有帮助。

如果我以与 2016 版本相同的方式关闭我的 GUI-window,程序将关闭。奇怪的是,如果我使用关闭命令,如果我 运行 我的 window 在 Windows 7 Pro 中独立,则程序中会显示错误(回溯(最近调用last):文件“”,第 1152 行,在 closeEvent ValueError 中:slot quit() -> void 需要 QApplication 实例作为第一个参数。),我的 GUI 已关闭,我可以继续工作。

所以我的 GUI 需要以某种方式关闭,到目前为止我无法弄清楚。

我的 GUI 是通过在程序终端中调用 showMyGUI() 函数打开的,可以在其中执行 python 命令,或者通过按 F 按钮打开此函数链接到的位置。

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

import sys, os
progVers = getVredVersion()[:1]
if progVers == "8": #2016-version
    from PySide.QtCore import *
    from PySide.QtGui import *
elif progVers == "9": #2017-version
    from PythonQt.QtCore import *
    from PythonQt.QtGui import *

class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        grid = QGridLayout()
        grid.setSpacing(10)

        ...

        self.setWindowModality(Qt.ApplicationModal)
        self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.WindowMaximizeButtonHint)
        self.show()

    def closeEvent(self,event):
        progVers = getVredVersion()[:1]
        if progVers == "8":      
            QApplication.instance().quit()
        elif progVers == "9":
            QApplication.quit() #as used for standalone in Windows 7 Pro
        event.accept()

def showMyGUI():   
    app = QApplication.instance()
    window = MainWindow()
    app.exec_()

keyF11 = vrKey(Key_F11)
keyF11.connect(showMyGUI)

谁能告诉我如何正确关闭我的 GUI?

我的解决办法是: MainWindow 现在正在继承形式 QDialog 并且需要父级 (def __init__(self, parent=None):和 super(MainWindow, self).__init__(parent))。创建 MainWindow-object 时,parent-window 可以在 2016 版本中使用 verdMainWindow() 访问,在 2017 版本中使用 vrMainWindow 访问。我以这种方式 class 创建了一个对象 window=MainWindow(vrMainWindow).