2014-12-09 1 views
0

도와주세요!MAXscript Listener를 실행할 수 없습니다.

나는 파이썬으로 GUI를 만들고 있습니다. 3D로 실행할 수 있습니다. 맥스, 누군가 내가 파이사이드를 써야한다고 말한 것을 들었습니다. 그리고 이제까지는 언제나 괜찮을 것입니다. 그것은 "MAXScript를 리스너"에 의해 잘 실행, 내 코드처럼 같은 다른 코드를 시도

import sys 
from PySide import QtGui 
from PySide.QtGui import * 
from PySide.QtCore import * 

class Window(QDialog): 
    def __init__(self, parent=None): 
     super(Window, self).__init__(parent) 

     self.setMinimumHeight(660) 
     self.setMinimumWidth(700) 
     self.setMaximumHeight(660) 
     self.setMaximumWidth(700) 

     grid = QtGui.QGridLayout() 
     grid.addWidget(self.First(), 0,0,2,0) 


     self.setLayout(grid) 

     self.setWindowTitle("Library") 
     self.resize(700, 660) 

    def First(self): 
     groupBox = QtGui.QFrame() 
     groupBox.setMaximumWidth(230) 
     groupBox.setMaximumHeight(700) 

     lbRenderer = QtGui.QLabel("Renderer :",self) 
     lbFolders = QtGui.QLabel("Folders :",self) 

     cbRenderer = QtGui.QComboBox(self) 
     cbRenderer.addItem("Vray") 
     cbRenderer.addItem("Octane") 

     lvFolders = QtGui.QListView(self) 
     lvFolders.setMaximumWidth(220) 
     lvFolders.setMaximumHeight(500) 

     btnAddNewObject = QtGui.QPushButton('Add New Objects',self) 
     btnNewSet = QtGui.QPushButton('New Set',self) 


     vbox = QtGui.QGridLayout() 
     vbox.addWidget(lbRenderer,0,0) 
     vbox.addWidget(cbRenderer,0,1,1,3) 
     vbox.addWidget(lbFolders,2,0,1,4) 
     vbox.addWidget(lvFolders,3,0,1,4) 
     vbox.setColumnStretch(1, 1) 
     vbox.addWidget(btnAddNewObject,4,0,1,2) 
     vbox.addWidget(btnNewSet,4,3) 


     groupBox.setLayout(vbox) 
     return groupBox 

app = QApplication.instance() 
if app is None: 
    app = QApplication(sys.argv) 
    clock = Window() 
    clock.show() 
app.exec_() 

:

이 내 코드입니다. 하지만 내가 왜 이걸 실행하려고하면 아무 것도 나타나지 않는 이유를 모르겠다. (내 GUI 또는 경고는 내 코드가 좋지 않다.) 모든

This is my command

답변

1

먼저 - 당신이 다음 단지 인 (문자열을 보내 그러나 당신이 당신의 스크립트가 잘못 초기화하는, 당신은 #Success (제대로 초기화 의미 파이썬), 을 반환하는 '초기화'함수를 호출 파일 경로)이 작업은 아무 것도 수행하지 않습니다. 당신이 사용해야하는 것은 : MAXScript를 리스너 \ 편집기에서

python.ExecuteFile "C:\\Program Files\\Autodesk\\3ds Max 2015\\scripts\\Python\\yourPythonScript.py" 

.

오토 데스크 문서는 말한다 : 파이썬 2.7.3와 호환 PySide 1.2 의 사전 구축 된 버전

3ds 맥스 제공됩니다. 다음, 파이썬 파일이 저장에서 언급 한 명령을 제대로 실행, 그들은 당신이 실행할 수있는 간단한 예제 스크립트를 제공 한

QtCore 
QtGui 
QtNetwork 
QtOpenGL 
QtSql 
QtSvg 
QtTest 
QtWebKit 
QtXml 

:이 버전은 모듈의 다음 하위 집합이 포함되어 있습니다 처음.

코드

은 여기에 있습니다 : 그들은 또한 중요하다 이것을 언급

from PySide import QtGui 
import MaxPlus 

class _GCProtector(object): 
    widgets = [] 

def make_cylinder(): 
    obj = MaxPlus.Factory.CreateGeomObject(MaxPlus.ClassIds.Cylinder) 
    obj.ParameterBlock.Radius.Value = 10.0 
    obj.ParameterBlock.Height.Value = 30.0 
    node = MaxPlus.Factory.CreateNode(obj) 
    time = MaxPlus.Core.GetCurrentTime() 
    MaxPlus.ViewportManager.RedrawViews(time) 

    return 

app = QtGui.QApplication.instance() 
if not app: 
    app = QtGui.QApplication([]) 

def main():  
    MaxPlus.FileManager.Reset(True) 
    w = QtGui.QWidget() 
    w.resize(250, 100) 
    w.setWindowTitle('Window') 
    _GCProtector.widgets.append(w) 
    w.show() 

    main_layout = QtGui.QVBoxLayout() 
    label = QtGui.QLabel("Click button to create a cylinder in the scene") 
    main_layout.addWidget(label) 

    cylinder_btn = QtGui.QPushButton("Cylinder") 
    main_layout.addWidget(cylinder_btn) 
    w.setLayout(main_layout) 

    cylinder_btn.clicked.connect(make_cylinder) 

if __name__ == '__main__': 
    main() 

:

는 일반적으로 하나 QtGui.QApplication를 사용하여 스크립트()에서 PySide 응용 프로그램 개체를 만듭니다. 이 같은 객체에 대한 핸들을 얻을 수 있도록하지만,에 3ds 맥스가하는 PySide 응용 프로그램을 실행이 이미 존재 :

QtGui.QApplication.instance() 

사용하는 것을로 시작 스크립트 및 포트와 같은 GUI 항목과 그것은 당신을 일으키고 달릴 것입니다.

+0

정말 고마워요,하지만 난 위의 코드에 내 코드를 삽입 할 때, 그것은 코드가 화면, 성공 통보 ,하지만 내부에 어떤 기능을 가지고 있지 않습니다. –

0

나는 당신의 코드를 고치려고했지만 아무 일도 일어나지 않는다. 나는 그 이유를 모른다. 우선, 코드를 열어 Pycharm에서 실행했지만 실행할 수는 없습니다. 하지만 Maxscript Listener에서 완전히 작동합니다. 내게 설명해 주시겠습니까?

두 번째로 코드를 수정하려고했습니다. 그것은 모두 동일합니다, 나는 Maxscript에서 실행할 수 있지만 내용과 기능은 사라집니다.

내 코드

from PySide import QtGui 
import MaxPlus 

class _GCProtector(object): 
    widgets = [] 


app = QtGui.QApplication.instance() 
if not app: 
    app = QtGui.QApplication([]) 

    def main(): 
     MaxPlus.FileManager.Reset(True) 
     w = QtGui.QWidget() 
     w.setWindowTitle('Window') 
     _GCProtector.widgets.append(w) 
     w.show() 

     main_layout = QtGui.QGridLayout() 
     main_layout.addWidget(First(),0,0) 
     main_layout.addWidget(Second(),0,1) 
     w.setLayout(main_layout) 

    def First(): 
     groupBox = QtGui.QFrame() 
     lbRenderer = QtGui.QLabel("Renderer :",self) 
     vbox = QtGui.QGridLayout() 
     vbox.addWidget(lbRenderer,0,0) 
     groupBox.setLayout(vbox) 
     return groupBox 

    def Second(): 
     groupBox = QtGui.QFrame() 
     lbRenderer = QtGui.QLabel("Renderer :",self) 
     vbox = QtGui.QGridLayout() 
     vbox.addWidget(lbRenderer,0,0) 
     groupBox.setLayout(vbox) 
     return groupBox 

if __name__ == '__main__': 
    main() 

입니다 그리고 이것은 Maxcript 에서 경고입니다

+0

경로를 사용할 때 이중 슬래시를 사용하거나 다른 방법으로 슬래시를 넣어야합니다. 이 "C : \\ folder \\ file.py" 또는 "c : /folder/file.py" 내 첫 번째 대답을 잊어 버린 나는 이것을 편집했습니다. –