我在可视化程序的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?
答案 0 :(得分:0)
我的解决方案是:
MainWindow
现在继承了QDialog
格式,需要父级(def __init__(self, parent=None
):和super(MainWindow, self).__init__(parent)
)。在创建MainWindow
- 对象时,可以使用2017版本中的verdMainWindow()
访问父窗口,并在2017版本中使用vrMainWindow
访问父窗口。我以这种方式创建该类的对象window=MainWindow(vrMainWindow)
。