2015-01-14 4 views
0

이 코드로 GUI를 만들고 싶습니다. Add New Object Button을 클릭하면 QMainWindown을 사용하는 팝업이 표시되지만 QLabel을 여기에 넣으려는 경우 작동하지 않습니다.QMainWindow의 경우

why.i 모두가 나에게 더 많은 것을 줄 수 있기를 바랍니다. 조언. 감사합니다 당신

이 내 코드입니다 :

from PySide import QtCore, QtGui 
import sys 

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

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

     self.mainLayout = QtGui.QGridLayout() 
     self.mainLayout.addWidget(self.First(), 0, 0, 2, 0) 
     self.setLayout(self.mainLayout) 
     self.setWindowTitle("Library") 
     self.resize(700,660) 
    #----------------------------------------FIRST COLUMN------------------------------------- 
    def First(self): 
     FirstFrame = QtGui.QFrame() 
     FirstFrame.setFixedSize(230,700) 

    # LABEL 
     renderer_lb = QtGui.QLabel("Renderer :") 
     folders_lb = QtGui.QLabel("Folder :") 
    #COMBOBOX 
     self.renderer_cbx = QtGui.QComboBox() 
     self.renderer_cbx.addItem("Vray") 
     self.renderer_cbx.addItem("Octane") 
    # LIST VIEW FOLDER 
     self.folders_lv = QtGui.QListView() 
    # BUTTON 
     addnewobject_btn = QtGui.QPushButton("Add New Objects") 
     newset_btn = QtGui.QPushButton("New Set") 

    # DEFINE THE FUNCTION FOR FIRST FRAME 
     Firstbox = QtGui.QGridLayout() 
     Firstbox.addWidget(renderer_lb,0,0) 
     Firstbox.addWidget(folders_lb,2,0,1,4) 
     Firstbox.addWidget(self.renderer_cbx,0,1,1,3) 
     Firstbox.addWidget(self.folders_lv,3,0,1,4) 
     Firstbox.addWidget(addnewobject_btn,4,0,1,2) 
     Firstbox.addWidget(newset_btn,4,3) 
     Firstbox.setColumnStretch(1, 1) 
     FirstFrame.setLayout(Firstbox) 

     addnewobject_btn.clicked.connect(self.addnewobject) 

     return FirstFrame 

    def addnewobject(self): 
     window = QtGui.QMainWindow(self) 
     window.setWindowTitle('Select folder of new objects') 
     window.setFixedSize(450,90) 
     window.show() 

     folder_lb = QtGui.QLabel("Folder : ") 

     browser = QtGui.QGridLayout() 
     browser.addWidget(folder_lb,0,0) 
     window.setLayout(browser) 

if __name__ == '__main__': 
    window = Window() 
    sys.exit(window.exec_()) 
+0

아마도 이것은 가능한 가장 짧은 가능한 예가 아니며 "작동하지 않음"이 의미하는 것이 명확하지 않습니다. 대신 무엇이 발생합니까? – Trilarion

답변

1

당신이 First() 기능에했던 것처럼 그냥 당신이 QFrame를 사용하여 만든 위젯을 만들 수 있습니다. 그런 다음 새 창에 대한 중앙 위젯을 설정할 수 있습니다.

from PySide import QtCore, QtGui 
import sys 

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

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

     self.mainLayout = QtGui.QGridLayout() 
     self.mainLayout.addWidget(self.First(), 0, 0, 2, 0) 
     self.setLayout(self.mainLayout) 
     self.setWindowTitle("Library") 
     self.resize(700,660) 
     self.show() 
    #----------------------------------------FIRST COLUMN------------------------------------- 
    def First(self): 
     FirstFrame = QtGui.QFrame() 
     FirstFrame.setFixedSize(230,700) 

    # LABEL 
     renderer_lb = QtGui.QLabel("Renderer :") 
     folders_lb = QtGui.QLabel("Folder :") 
    #COMBOBOX 
     self.renderer_cbx = QtGui.QComboBox() 
     self.renderer_cbx.addItem("Vray") 
     self.renderer_cbx.addItem("Octane") 
    # LIST VIEW FOLDER 
     self.folders_lv = QtGui.QListView() 
    # BUTTON 
     addnewobject_btn = QtGui.QPushButton("Add New Objects") 
     newset_btn = QtGui.QPushButton("New Set") 

    # DEFINE THE FUNCTION FOR FIRST FRAME 
     Firstbox = QtGui.QGridLayout() 
     Firstbox.addWidget(renderer_lb,0,0) 
     Firstbox.addWidget(folders_lb,2,0,1,4) 
     Firstbox.addWidget(self.renderer_cbx,0,1,1,3) 
     Firstbox.addWidget(self.folders_lv,3,0,1,4) 
     Firstbox.addWidget(addnewobject_btn,4,0,1,2) 
     Firstbox.addWidget(newset_btn,4,3) 
     Firstbox.setColumnStretch(1, 1) 
     FirstFrame.setLayout(Firstbox) 

     addnewobject_btn.clicked.connect(self.addnewobject) 

     return FirstFrame 

    def addnewobject(self): 
     secondFrame = QtGui.QFrame() 
     secondFrame.setFixedSize(230,700) 
    # LABEL 
     folders_lb = QtGui.QLabel("Folder :") 

    # DEFINE THE FUNCTION FOR FIRST FRAME 
     secondGridLayout = QtGui.QGridLayout() 
     secondGridLayout.addWidget(folders_lb,2,0,1,4) 
     secondGridLayout.setColumnStretch(1, 1) 
     secondFrame.setLayout(secondGridLayout) 

     window = QtGui.QMainWindow(self) 
     window.setWindowTitle('Select folder of new objects') 
     window.setFixedSize(600,700) 

     window.setCentralWidget(secondFrame) # Here is the main change: setLayout(QLayout) to setCentralWidget(QWidget) 
     window.show() 

if __name__ == '__main__': 
    window = Window() 
    sys.exit(window.exec_()) 

마야 용입니까? 그렇다면 모달 창을 사용하지 말 것을 권장합니다.

+0

정말 고마워, 나는 3DsMax를 지원하려고 노력한다. 나는 단지 새로운 사람입니다. 그래서 많은 것이 저와 이상합니다. 다시 한번 고마워. –

+0

질문이 하나 더 있습니다. 다른 방법이 있습니까? Def 내부에 프레임을 만들어보십시오. 여기에 모든 것을 넣으십시오. –

+1

당신은 addNewobject() 안에 Second()의 모든 QFrame 생성을 두는 것을 의미합니까? – DrHaze