私は視覚化プログラムのAPIでPython 2.7を使っています。 2016年版ではPySideを使ってGUIを作成しましたが、guiteはうまく動いていました。今では新しい2017バージョンでPySideからPythonQtに変更されたので、インポートといくつかのコマンドを変更する必要がありましたが、これまでのところ動作します。PythonQtでAPIのQWidgetウィンドウを正しく閉じる方法
私はGUIを閉じて、現在のプロジェクトや新しいプロジェクトを開くなどの作業を進めようとすると、2017年版が終了することがあります。時にはエラーメッセージもありませんが、そのメッセージはまったく役に立ちません。
2016バージョンと同じ方法で私のGUIウィンドウを閉じると、プログラムは閉じられます。奇妙なことは、Windows 7 Proで自分のウィンドウをスタンドアロンで実行した場合に必要なcloseコマンドを使用すると、プログラムにエラーが表示されていることです(Traceback(最新の呼び出し最後)):File 1152、closeEvent ValueError:slot quit() - > voidは、最初の引数としてQApplicationインスタンスが必要です。)、私の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を正しく閉じる方法を教えてもらえますか?
'MainWindow'を閉じるために標準の' self.close() 'を使用することはできませんし、' QApplication'も終了します。 – furas
既に試してみましたが、上記のように私は作業を続行しようとするとプログラム全体が停止します。しかし、今私は解決策を見つけました。 'MainWindow'は' QDialog'の形を継承し、親( '' def __init __(self、parent = None): ''と '' super(MainWindow、self).__ init __(parent) ')を必要とします。 'MainWindow'オブジェクトを作成するとき、parent-windowには2016バージョンの' verdMainWindow() 'と2017バージョンの' vrMainWindow'でアクセスすることができます。ちょうどそれについて知りましたが、あなたの答えに感謝します。 – JFT
ちょっと@JFT、あなたのポストへの答えを追加し、それから数日後に答える投票! – darkgaze