Как правильно закрыть QWidget-окно в API с помощью PythonQt
Я работаю с Python 2.7 в API-интерфейсе программы визуализации. В его 2016-версии я создал графический интерфейс с PySide, и он работал хорошо. Теперь в их новой версии 2017 года они изменились с PySide на PythonQt, поэтому мой импорт и несколько команд пришлось изменить, но пока он работает.
Но если я закрою свой графический интерфейс и попытаюсь продолжить работу, например, при открытии текущего или нового проекта, версия 2017 года завершается, иногда без, иногда без сообщения об ошибке, но это сообщение не помогает вообще.
Если я закрою свое GUI-окно так же, как в версии 2016 года, программа закроется. Странно то, что если я использую команду закрытия, которая мне понадобится, если я запускаю автономное окно в Windows 7 Pro, в программе отображается ошибка (Traceback (последний вызов был последним): файл "", строка 1152, в closeEvent ValueError: slot quit() -> void требует в качестве первого аргумента экземпляр QApplication.) Мой графический интерфейс пользователя закрыт, и я могу продолжить работу.
Так что мой графический интерфейс должен быть закрыт определенным образом, что я до сих пор не мог понять.
Мой графический интерфейс открывается путем вызова функции 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)
Может кто-нибудь сказать мне, как правильно закрыть мой графический интерфейс?
1 ответ
Мое решение:MainWindow
сейчас наследуется форма QDialog
и нужен родитель (def __init__(self, parent=None
): а также super(MainWindow, self).__init__(parent)
). При создании MainWindow
-объект, к родительскому окну можно получить доступ с помощью verdMainWindow()
в версии 2016 года с vrMainWindow
в 2017-версии. Я создаю объект этого класса таким образом window=MainWindow(vrMainWindow)
,