我有此代码:
class Window(QWidget):
def __init__(self):
super().__init__()
def init_gui(self):
self.layout = QVBoxLayout()
self.setLayout(self.layout)
self.new1()
self.new2()
self.showMaximized()
def create_scroll_area(self):
scroll_area = QScrollArea()
widget = QWidget()
scroll_area.setWidget(widget)
layout = QVBoxLayout()
widget.setLayout(layout)
button = QPushButton("Ahoj")
layout.addWidget(button)
self.layout.addLayout(layout)
def new1(self):
self.create_scroll_area()
def new2(self):
self.create_scroll_area()
我收到此错误消息:
QLayout::addChildLayout: layout "" already has a parent
怎么了?
谁是布局的父母?小部件?我也尝试使用self.widget
代替widget
,但仍然无法正常工作。
答案 0 :(得分:0)
请尝试使用此代码。
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class Window(QWidget):
def __init__(self, parent=None):
super().__init__(parent=None)
self.init_gui()
def init_gui(self):
self.create_scroll_area()
self.showMaximized()
def create_scroll_area(self):
scroll_area = QScrollArea()
widget = QWidget()
layout = QVBoxLayout()
button = QPushButton("Ahoj")
layout.addWidget(button)
widget.setLayout(layout)
scroll_area.setWidget(widget)
self.setLayout(layout)
def main():
app = QApplication([])
window = Window()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
让我们从A修改为Z。
1以在__init__构造函数中编写self.init_gui()。
如果不这样做,就无法在第一次执行init_gui
方法。
2。setLayout()
或setWidget()
应该至少写在最后一个位置。
在python中,我们准备要显示的内容,并将其设置在mainwidget上,并在最后一次显示。
3。请注意self.layout名称。
小部件最初具有setLayout()
方法。和layout()
方法。
如果使self.layout = ***,则会破坏QWidget
的原始方法。
4。也可以删除new1
和new2
方法。
请直接致电他们。
5。请查看create_scroll_area
方法。
您制作了三个小部件。QScrollArea
,QWidget
,QPushButton
。
并创建一个布局对象。然后将布局设置为QWidget
。
但是,您需要在小部件设置布局之前设置QWidget
。
这不是很好的编码顺序。
您创建了QPushButton
,但该按钮不属于任何窗口小部件。
因为您确实将按钮设置在self.layout
上,但是如果要显示它,则必须在最后一个位置setLayout(self.layout)
。