Как правильно закрыть 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),

Другие вопросы по тегам