0

視覚化プログラムの 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を適切に閉じる方法を誰か教えてもらえますか?

4

1 に答える 1

0

私の解決策は次のとおり MainWindowです。現在、フォームを継承してQDialogおり、親(def __init__(self, parent=None): およびsuper(MainWindow, self).__init__(parent))が必要です。-objectを作成すると、2016 バージョンでMainWindowは親ウィンドウにアクセスでき、2017 バージョンでは親ウィンドウにアクセスできます。この方法でそのクラスのオブジェクトを作成します。verdMainWindow()vrMainWindowwindow=MainWindow(vrMainWindow)

于 2016-12-14T17:24:01.767 に答える