Python 如何在pyside中将小部件类导入Qt MainWindow
我想在pyside中定义两个类 第一个:StartFrame是主窗口。第二个:帮助面板是GUI的一部分 我尝试将帮助面板导入StartFrame并输出它。但结果是一个空窗口,其中没有帮助面板 这是我的密码: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
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()