2016-06-20 4 views
1

PySide 및 Python을 사용하여 간단한 QT 앱을 만들려고합니다. 필요하다면 3dsMax 스크립트, Modo 스크립트 및 독립 실행 형 앱으로 실행하고 싶습니다. 그래서 D : \ PyTest에 다음 파일을 저장했습니다. 이 테스트를위한 QLabel 일뿐입니다.3dsMax 및 Modo 용 PySide 위젯

(TestWidget.py)을 독립 실행 형으로 실행하면 정상적으로 작동합니다. Modo에서 시작하면 (ModoStart.py) 올바르게 시작되지만 Modo의 아무 곳이나 클릭하면 전체 창이 손상됩니다. SystemExit없이에서, 라인 (13), 역 추적 (마지막으로 가장 최근 통화) : : : 파일 "/ PyTest \ TestWidget.py D": 3dsMax의에서 나는 다음과 같은 오류가 -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) 

UPDATE : 나는 모든 세 가지 옵션에 대해 하나 개의 파일 (3dsMax의/모도/스탠드 형)가 시도
. 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() 
+0

당신은 전체 역 추적을 게시 할 수 있습니까? –

+0

어떻게해야합니까? (미안해, 파이썬에 처음 온거야?) MaxStart.py에서 의 두 가지를 시도했습니다. 가져 오기 추적은 입니다. . 시도 : \t 응용 프로그램 = QtGui.QApplication.instance() \t parent_handle = QtGui.QWidget (MaxPlus.GetQMaxWindow()) \t TestWidget.Exception을 제외한 예외 : 오류 : traceback.print_exc() 및 TestWidget.py 가져 오기 추적 . . . 시도 : sys.exit (app.exec_()) 예외를 제외하고 , ERR : 3DSMAX에 만 다음 한 줄 것을 당신에게 말하고 있도록 traceback.print_exc() 아무것도는 어떤 차이 – Nick

+0

아를 만드는 것? 미안 해요 3dsmax에 익숙하지 않습니다. –

답변

1

는 파운드리의 도움으로 나는 작업 버전이있다. 그들은

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_()) 
StandAlone.py Modo.py 3dsMax.py 나에게

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 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() 

을이 매우 유용한 링크 http://sdk.luxology.com/wiki/CustomView

했다

ToolboxUI.py는

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)