2016-10-24 2 views
0

Я работаю с Python 2.7 в API программы визуализации. В своей версии 2016 года я создал графический интерфейс с PySide, и он работал хорошо. Теперь в новой версии 2017 они изменились с PySide на PythonQt, поэтому мне пришлось изменить импорт и несколько команд, но они все еще работают до сих пор.Как правильно закрыть окно QWidget в API с PythonQt

Но если я закрою свой графический интерфейс и попытаюсь продолжить работу, например, открытие текущего или нового проекта, версия 2017 выходит, иногда с, иногда без сообщения об ошибке, но это сообщение вообще не помогает.

Если я закрываю свое GUI-окно так же, как в версии 2016 года, программа закрыта. Странно то, что если я использую команду close, которая мне понадобится, если я закрою автономное окно в Windows 7 Pro, в программе будет отображаться ошибка (Traceback (последний последний вызов): Файл «», строка 1152, в closeEvent ValueError: slot quit() -> void требует экземпляра QApplication в качестве первого аргумента.), Мой графический интерфейс закрыт, и я могу продолжить работу.

Итак, мой графический интерфейс должен быть закрыт определенным образом, что я пока не мог понять.

Мой 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) 

Может ли кто-нибудь сказать мне, как правильно закрыть мой графический интерфейс?

+0

Вы не можете использовать стандартный 'self.close()' для закрытия 'MainWindow', и он также завершит' QApplication'. – furas

+0

Уже пробовал это, но, как я уже упоминал выше, он закрывает всю программу, когда я пытаюсь продолжить работу. Но я нашел решение сейчас. 'MainWindow' теперь наследует форму' QDialog' и нуждается в родительском ('def __init __ (self, parent = None):' и 'super (MainWindow, self) .__ init __ (parent)'). При создании объекта MainWindow'a родительское окно может быть доступно с помощью 'verdMainWindow()' в 2016-версии a с 'vrMainWindow' в 2017-версии. Просто узнал об этом, но спасибо за ваш ответ. – JFT

+0

Эй @JFT, добавьте ответ на свой пост, а затем проголосуйте за него через пару дней после этого! – darkgaze

ответ

0

Мое решение: MainWindow теперь унаследовать форму QDialog и нужен родитель (def __init__(self, parent=None): и super(MainWindow, self).__init__(parent)). При создании объекта MainWindow доступ к родительскому окну можно получить с verdMainWindow() в 2016-версии a с vrMainWindow в версии 2017 года. Таким образом я создаю объект этого класса window=MainWindow(vrMainWindow).

Смежные вопросы