PySide と Python を使用して、必要に応じて 3dsMax スクリプト、Modo スクリプト、およびスタンドアロン アプリとして実行する単純な QT アプリを作成しようとしています。したがって、次のファイルを D:\PyTest に保存しました。このテストの単なる QLabel です。
スタンドアロンとして実行すると ( TestWidget.py )、正常に動作します。Modo から起動すると ( ModoStart.py )、正しく起動しますが、Modo のどこかをクリックしようとすると、ウィンドウ全体がクラッシュします。3dsMax で次のエラーが発生します: Traceback (most recent call last): File "D:/PyTest\TestWidget.py", line 13, in SystemExit: -1
どうすればそれを機能させることができますか?
ありがとう、
ニック
TestWidget.py
import sys
from PySide import QtGui
def open_widget(app, parent_handle=None):
w = QtGui.QLabel()
w.setText("My Widget")
w.show()
if parent_handle is not None:
w.setParent(parent_handle)
sys.exit(app.exec_())
if __name__ == '__main__':
open_widget(QtGui.QApplication(sys.argv))
MaxStart.py
import sys
FileDir = 'D:/PyTest'
if FileDir not in sys.path:
sys.path.append(FileDir)
#Rest imports
from PySide import QtGui
import MaxPlus
import TestWidget
reload(TestWidget)
app = QtGui.QApplication.instance()
parent_handle = QtGui.QWidget(MaxPlus.GetQMaxWindow())
TestWidget.open_widget(app, parent_handle)
ModoStart.py
import sys
FileDir = 'D:/PyTest'
if FileDir not in sys.path:
sys.path.append(FileDir)
#Rest imports
from PySide import QtGui
import TestWidget
reload(TestWidget)
app = QtGui.QApplication.instance()
TestWidget.open_widget(app)
更新:
また、3 つのオプション (3dsMax/Modo/Stand-alone) すべてに対して 1 つのファイルを用意しようとしました。3dsMax と Stand-Alone では問題なく動作しているようですが、Modo では、ウィジェットの外側をクリックしたり、ウィジェットを閉じようとすると、Modo が即座にクラッシュします。
import sys
import traceback
from PySide import QtGui
handle = None
appMode = None
try:
import MaxPlus
appMode = '3dsMax'
handle = MaxPlus.GetQMaxWindow()
except:
try:
import lx
appMode = 'Modo'
except:
appMode = 'StandAlone'
app = QtGui.QApplication.instance()
if not app:
app = QtGui.QApplication([])
def main():
w = QtGui.QLabel(handle)
w.setText("My Widget")
w.resize(250, 100)
w.setWindowTitle('PySide Qt Window')
w.show()
try:
sys.exit(app.exec_())
except Exception, err:
traceback.print_exc()
pass
main()