Python 如何在pyside中将小部件类导入Qt MainWindow

Python 如何在pyside中将小部件类导入Qt MainWindow,python,pyside,Python,Pyside,我想在pyside中定义两个类 第一个:StartFrame是主窗口。第二个:帮助面板是GUI的一部分 我尝试将帮助面板导入StartFrame并输出它。但结果是一个空窗口,其中没有帮助面板 这是我的密码: import sys from PySide import QtGui from PySide import QtCore from PySide.QtCore import Signal as pyqtSignal from PySide.QtCore import Slot as pyq

我想在pyside中定义两个类

第一个:StartFrame是主窗口。第二个:帮助面板是GUI的一部分

我尝试将帮助面板导入StartFrame并输出它。但结果是一个空窗口,其中没有帮助面板

这是我的密码:

import sys
from PySide import QtGui
from PySide import QtCore
from PySide.QtCore import Signal as pyqtSignal
from PySide.QtCore import Slot as pyqtSlot


class StartFrame(QtGui.QMainWindow):
    def __init__(self, parent = None):
        super(StartFrame, self).__init__(parent)  
        self.parent = parent
        self.initialize()
    def initialize(self):
        self.hp = HelpPanel(self)
        grid = QtGui.QGridLayout()
        grid.addWidget(self.hp, 1, 0)
        self.setLayout(grid)
        self.show()


class HelpPanel(QtGui.QWidget):
    def __init__(self, parent):
        super(HelpPanel,self).__init__(parent)    
        self.parent = parent                      
        bsize = QtGui.QVBoxLayout()                 
        title = QtGui.QLabel('Help Information')    
        text_area = QtGui.QTextEdit()
        text_area.setReadOnly(True)
        bsize.addWidget(title)        
        bsize.addStretch(0)
        bsize.addWidget(text_area)     
        bsize.addStretch(1)
        self.setLayout(bsize)           
        self.show()


def main():
    app = QtGui.QApplication(sys.argv)
    ex = StartFrame()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main() 
如果没有StartFrame,帮助面板本身可以运行并获得输出。我怀疑问题发生在self.hp=HelpPanel(self)上。但我不确定。
提前感谢。

我不确定PySide为什么不发出警告,但如果您在PyQt下运行此代码,您会收到以下消息:

QWidget::setLayout: Attempting to set QLayout "" on StarteFrame "", which already has a layout
问题是,
QMainWindow
类已经有了自己的布局,您正试图覆盖它。克服这一问题的一种方法是将布局放在一个新的小部件中,并将其分配给
QMainWindow的实例

新的
initialize
函数如下所示:

    def initialize(self):
        self.hp = HelpPanel(self)
        grid = QtGui.QGridLayout()
        grid.addWidget(self.hp)
        widget = QtGui.QWidget()
        widget.setLayout(grid)
        self.setCentralWidget(widget)
        self.show()