視覚化プログラムの API で Python 2.7 を使用しています。その 2016 年版では、PySide を使用して GUI を作成しましたが、うまく機能していました。新しい 2017 バージョンでは、PySide から PythonQt に変更されたため、インポートといくつかのコマンドを変更する必要がありましたが、今のところまだ機能しています。
しかし、GUI を閉じて作業を続行しようとすると、たとえば、現在または新しいプロジェクトを開くと、2017 バージョンが終了し、エラー メッセージが表示される場合もあれば、エラー メッセージが表示されない場合もありますが、そのメッセージはまったく役に立ちません。
2016 バージョンと同じ方法で GUI ウィンドウを閉じると、プログラムが閉じられます。奇妙なことに、Windows 7 Pro でウィンドウをスタンドアロンで実行する場合に必要となる close コマンドを使用すると、プログラムにエラーが表示されます (Traceback (most recent call last): File "", line 1152, in closeEvent ValueError: slot quit() -> void requires QApplication instance as first argument.)、GUI が閉じられ、作業を続行できます。
そのため、特定の方法で GUI を閉じる必要がありますが、これまでのところわかりませんでした。
私の GUI は、python コマンドを実行できるプログラム ターミナルで showMyGUI() 関数を呼び出すか、この関数がリンクされている 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を適切に閉じる方法を誰か教えてもらえますか?