2016-10-24 6 views
0

私は視覚化プログラムの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を正しく閉じる方法を教えてもらえますか?

+0

'MainWindow'を閉じるために標準の' self.close() 'を使用することはできませんし、' QApplication'も終了します。 – furas

+0

既に試してみましたが、上記のように私は作業を続行しようとするとプログラム全体が停止します。しかし、今私は解決策を見つけました。 'MainWindow'は' QDialog'の形を継承し、親( '' def __init __(self、parent = None): ''と '' super(MainWindow、self).__ init __(parent) ')を必要とします。 'MainWindow'オブジェクトを作成するとき、parent-windowには2016バージョンの' verdMainWindow() 'と2017バージョンの' vrMainWindow'でアクセスすることができます。ちょうどそれについて知りましたが、あなたの答えに感謝します。 – JFT

+0

ちょっと@JFT、あなたのポストへの答えを追加し、それから数日後に答える投票! – darkgaze

答えて

0

私のソリューションは、次のとおりです。 MainWindow今の形QDialogを継承し、親(def __init__(self, parent=None)を必要とします)とsuper(MainWindow, self).__init__(parent)MainWindowオブジェクトを作成する場合、親ウィンドウは、2016バージョンのverdMainWindow()と、2017バージョンのvrMainWindowでアクセスできます。私はこのようにしてこのクラスのオブジェクトを作成しますwindow=MainWindow(vrMainWindow)

関連する問題