我想在pyside中定义两个类。
第一个:StartFrame是MainWindow。第二个:HelpPanel是GUI的一部分。
我尝试将HelpPanel导入StartFrame并输出。但结果是一个空窗口,里面没有HelpPanel。
这是我的代码:
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,HelpPanel本身可以运行并获得输出。我怀疑问题发生在self.hp = HelpPanel(self)上。但我不确定。 提前谢谢。
答案 0 :(得分:1)
我不确定为什么PySide不会发出警告,但是如果你在PyQt下运行这段代码就会得到这样的信息:
QWidget::setLayout: Attempting to set QLayout "" on StarteFrame "", which already has a layout
问题是QMainWindow
类已经有了自己的布局,而您正在尝试覆盖它。解决此问题的一种方法是将布局放在新窗口小部件中,并使用QMainWindow::setCentralWidget()
将其分配给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()