Python 用于3dsMax和Modo的PySide小部件
我正在尝试使用PySide和Python创建一个简单的QT应用程序,如果需要,我希望它可以作为3dsMax脚本、Modo脚本和独立应用程序运行。因此,我在我的D:\PyTest中保存了以下文件。这只是这个测试的QLabel 当我将它(TestWidget.py)作为一个独立程序运行时,它工作得很好。当我从Modo启动它(ModoStart.py)时,它会正确启动,但如果我尝试单击Modo中的任何位置,它会使整个窗口崩溃。在3dsMax中,我得到了以下错误:回溯(最近一次调用last): 文件“D:/PyTest\TestWidget.py”,第13行,在 系统退出:-1 你知道我该怎么做吗 谢谢,Python 用于3dsMax和Modo的PySide小部件,python,qt,pyside,3dsmax,cross-application,Python,Qt,Pyside,3dsmax,Cross Application,我正在尝试使用PySide和Python创建一个简单的QT应用程序,如果需要,我希望它可以作为3dsMax脚本、Modo脚本和独立应用程序运行。因此,我在我的D:\PyTest中保存了以下文件。这只是这个测试的QLabel 当我将它(TestWidget.py)作为一个独立程序运行时,它工作得很好。当我从Modo启动它(ModoStart.py)时,它会正确启动,但如果我尝试单击Modo中的任何位置,它会使整个窗口崩溃。在3dsMax中,我得到了以下错误:回溯(最近一次调用last): 文件“D
尼克 TestWidget.py MaxStart.py ModoStart.py 更新:
我还尝试为所有三个选项(3dsMax/Modo/standlone)创建一个文件。看起来它在3dsMax和单机版上运行良好,但在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()
好的,在铸造厂的帮助下,我有了一个工作版本。 他们给了我这个非常有用的链接 3dsMax.py 莫多比 单机版.py ToolboxUI.py
你能发布完整的回溯吗?我该怎么做(对不起,我是python新手)?我在MaxStart.py导入回溯中尝试了两件事。尝试:app=QtGui.QApplication.instance()parent\u handle=QtGui.QWidget(MaxPlus.GetQMaxWindow())TestWidget.open\u widget(app,parent\u handle)异常除外,错误:traceback.print\u exc()和in TestWidget.py导入traceback。try:sys.exit(app.exec_())除了异常,err:traceback.print_exc()似乎没有什么不同,所以在3dsmax中,它只告诉您一行?对不起,我对3dsmax不太熟悉。不用担心,谢谢您的尝试。不过我已经更新了我的帖子。我找到了一种方法,可以让它在3dsMax和单机环境下工作,但在Modo中,即使它启动良好,当我在小部件外部单击或试图关闭它时,Modo崩溃了。:/不确定你是否读过这篇文章。它也有点过时,所以不确定是否完全相关。
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)
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)
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()
from PySide import QtGui
import MaxPlus
import sys
ui_dir = r'D:/PyTest/SubFolder/'
if not ui_dir in sys.path:sys.path.insert(0,ui_dir)
import ToolboxUI
reload(ToolboxUI)
parent = MaxPlus.GetQMaxWindow()
w = QtGui.QWidget(parent)
ToolboxUI.create_layout(w, '3dsMax')
w.show()
import lx
import lxifc
import sys
ui_dir = r'D:/PyTest/SubFolder/'
if not ui_dir in sys.path:sys.path.insert(0,ui_dir)
import ToolboxUI
reload(ToolboxUI)
class MyButtonTest(lxifc.CustomView):
def customview_Init(self, pane):
if pane is None:
return False
custom_pane = lx.object.CustomPane(pane)
if custom_pane.test() is False:
return False
# get the parent object
my_parent = custom_pane.GetParent()
# convert to PySide QWidget
p = lx.getQWidget(my_parent)
# Check that it succeeds
if p is not None:
ToolboxUI.create_layout(p, 'Modo')
return True
return False
try:
lx.bless(MyButtonTest, "My Button Test")
except:
pass
from PySide import QtGui
import sys
import ToolboxUI
app = QtGui.QApplication([])
w = QtGui.QWidget()
ToolboxUI.create_layout(w, 'StandAlone')
w.show()
sys.exit(app.exec_())
from PySide import QtGui
appMode = None
def on_clicked(side):
print "Hello from the " + side + " side: " + appMode
def left_click():
on_clicked("left")
def center_click():
on_clicked("center")
def right_click():
on_clicked("right")
def create_layout(my_window, am):
global appMode
appMode = am
buttonLayout = QtGui.QHBoxLayout()
buttonLayout.setSpacing(0)
leftButton = QtGui.QPushButton("Left")
leftButton.setProperty("group", "left")
leftButton.clicked.connect(left_click)
rightButton = QtGui.QPushButton("Right")
rightButton.setProperty("group", "right")
rightButton.clicked.connect(right_click)
centerButton = QtGui.QPushButton("Center")
centerButton.setProperty("group", "center")
centerButton.clicked.connect(center_click)
buttonLayout.addWidget(leftButton)
buttonLayout.addWidget(centerButton)
buttonLayout.addWidget(rightButton)
my_window.setLayout(buttonLayout)