46985

[code]

    from PySide import QtGui
    
    import sys
    class Widget(QtGui.QWidget):
        def __init__(self,parent=None):
            super(Widget,self).__init__(parent=None)
    
    
    def main():
    
        try:
            QtGui.QApplication([])
        except Exception as e:
            print(10,e)
        widget = Widget()
        widget.show()
        sys.exit(QtGui.QApplication.exec_())
    if __name__ == "__main__":
        main()
    
[/code]

これは何の変哲もない、`Widget`を表示するだけのプログラムです。  
お聞きしたいのは、`QApplication`についてです。  
`QApplication`は、最初はエラーなく実行されるのですが、  
２回目からは、必ずエラーを吐きます。ウィジェットをクローズしても、  
カーネルは、`QApplication()`が一度実行されたことを覚えていているようで、  
カーネルを再起動しない限り、再度実行する事ができません。

追記：  
そのため、try:except文でこのエラーを回避することにより、コードを実行しています。  
もしこの文が無ければ、

[code]

    A QApplication instance already exists.
    
[/code]

と書かれた`RunTimeError`が発生します。

他の`Qt`ユーザーたちは、そういう事が無いように思うのですが、  
このエラーが発生しない方法はありますか？  
おもちの実行環境では、そのようなことはありませんか？  
開発環境は Anaconda3 Spyder3.2.4です。


CC BY-SA 4.0
2018-07-25T13:17:26.863
46962
2018-07-26T06:39:28.977
2018-07-25T16:14:17.427
3060
24284
question
python pyqt pyside
QApplication が２度目に必ずエラーを吐く現象について


[【補完】[PySide]
QtDesignerで遊ぼう](https://qiita.com/it_ks/items/449b7418e83956ecdc8c#qapplication)という記事に関連しそうな記載がありました。

記事によると、以下を実行すると`A QApplication instance already exists.`が発生するため、

[code]

    app = QtGui.QApplication(sys.argv)
    # Error: A QApplication instance already exists.
    # Traceback (most recent call last):
    #   File "<maya console>", line 1, in <module>
    # RuntimeError: A QApplication instance already exists. # 
    
[/code]

以下のように修正する必要があるそうです。

[code]

    app = QtGui.QApplication.instance()
    
[/code]


CC BY-SA 4.0
2018-07-26T06:39:28.977
46985
2018-07-26T06:39:28.977
46962
answer