Я работаю с 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)
Может ли кто-нибудь сказать мне, как правильно закрыть мой графический интерфейс?
Вы не можете использовать стандартный 'self.close()' для закрытия 'MainWindow', и он также завершит' QApplication'. – furas
Уже пробовал это, но, как я уже упоминал выше, он закрывает всю программу, когда я пытаюсь продолжить работу. Но я нашел решение сейчас. 'MainWindow' теперь наследует форму' QDialog' и нуждается в родительском ('def __init __ (self, parent = None):' и 'super (MainWindow, self) .__ init __ (parent)'). При создании объекта MainWindow'a родительское окно может быть доступно с помощью 'verdMainWindow()' в 2016-версии a с 'vrMainWindow' в 2017-версии. Просто узнал об этом, но спасибо за ваш ответ. – JFT
Эй @JFT, добавьте ответ на свой пост, а затем проголосуйте за него через пару дней после этого! – darkgaze