【发布时间】:2016-10-21 15:22:24
【问题描述】:
我正在尝试使用 PySide 和 Python 创建一个简单的 QT 应用程序,如果需要,我希望它可以作为 3dsMax 脚本、Modo 脚本和独立应用程序运行。因此,我在 D:\PyTest 中保存了以下文件。它只是这个测试的 QLabel。
当我将它 (TestWidget.py) 作为独立运行时,它运行良好。当我从 Modo 启动它 (ModoStart.py) 时,它会正确启动,但如果我尝试单击 Modo 中的任何位置,它会使整个窗口崩溃。在 3dsMax 中,我收到以下错误:Traceback(最近一次调用最后一次): 文件“D:/PyTest\TestWidget.py”,第 13 行,在 系统退出:-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)
更新:
我还尝试为所有三个选项(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()
【问题讨论】:
-
你能发布完整的回溯吗?
-
我该怎么做(对不起,我是 python 新手)?我在 MaxStart.py import traceback 中尝试了两件事。 .尝试: app = QtGui.QApplication.instance() parent_handle = QtGui.QWidget(MaxPlus.GetQMaxWindow()) TestWidget.open_widget(app, parent_handle) 例外,错误: traceback.print_exc() 和 TestWidget.py 导入 traceback 。 . .尝试:sys.exit(app.exec_()) except Exception, err: traceback.print_exc() 似乎没什么区别
-
哦,那么在 3dsmax 中它只告诉你那一行?抱歉,我对 3dsmax 不太熟悉。
-
不用担心,感谢您的尝试。我已经更新了我的帖子。我找到了一种让它在 3dsMax 和单机上都可以工作的方法,但是在 Modo 中,即使它启动良好,当我在小部件外部单击或尝试关闭它时,Modo 也会崩溃。 ://
-
community.thefoundry.co.uk/discussion/… 不确定你是否读过这个帖子。它也有点过时了,所以不确定是否完全相关。
标签: python qt pyside 3dsmax cross-application