2015-01-14 2 views
0

Я хочу создать графический интерфейс с помощью этого кода. Когда я нажму кнопку «Добавить новый объект», он покажет всплывающее окно (я использую QMainWindown), но я хочу поставить QLabel здесь, он не может работатьЧто происходит с QMainWindow

Я не знаю, почему. Я надеюсь, что каждый может дать мне больше советы. Спасибо Вам

Это мой код:

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

У меня есть еще один вопрос, есть ли у вас другой способ сделать это, я пытаюсь создать Frame внутри def Addnewobject, чтобы собрать все вместе здесь. –

+1

Вы имеете в виду, что все создание QFrame из Second() внутри addnewobject()? – DrHaze

Смежные вопросы