我正在尝试使用 PySide 和 Python 创建一个简单的 QT 应用程序,如果需要,我希望它作为 3dsMax 脚本、Modo 脚本和独立应用程序运行。因此,我在 D:\PyTest 中保存了以下文件。它只是这个测试的 QLabel。
当我将它(TestWidget.py)作为独立运行时,它工作正常。当我从 Modo 启动它 ( ModoStart.py ) 时,它会正确启动,但如果我尝试单击 Modo 中的任何位置,它会使整个窗口崩溃。在 3dsMax 中,我收到以下错误:Traceback(最近一次调用最后一次):文件“D:/PyTest\TestWidget.py”,第 13 行,在 SystemExit:-1
有什么想法可以让它发挥作用吗?
谢谢,
尼克
测试小部件.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)
更新:
我还尝试为所有三个选项(3dsMax/Modo/Stand-alone)创建一个文件。似乎它在 3dsMax 和 Stand-Alone 中运行良好,但在 Modo 中,如果我在 Widget 外部单击或尝试关闭它,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()