如何使用PythonQt正确关闭API中的qwidget窗口



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

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

如果我像2016年版本一样关闭gui窗口,程序将被关闭。奇怪的是,如果我使用关闭命令,我需要如果我在Windows 7 Pro中运行我的窗口独立,程序中显示错误(Traceback(最近的调用最后一次):文件",第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 -对象时,可以使用2016版本的verdMainWindow()访问父窗口,使用2017版本的vrMainWindow访问父窗口。我用这种方式创建了一个该类的对象window=MainWindow(vrMainWindow) .

最新更新