我有这个代码:
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
,它仍然无法正常工作。
请试试这段代码。
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名称。
Widget最初有setLayout()
方法。和layout()
方法。如果你使self.layout = ***,你就会粉碎QWidget
的原始方法。
它也可以删除new1
和new2
方法。
请直接打电话给他们。
请查看create_scroll_area
方法。
你制作了三个widget.QScrollArea
,QWidget
,QPushButton
。并制作一个布局对象。然后将布局设置为QWidget
。但是在小部件设置布局之前设置QWidget
。这不是编码的好顺序。
你制作QPushButton
但按钮不属于任何小部件。因为你肯定在self.layout
上设置了按钮,但是如果要显示它,你必须在最后一个位置使用setLayout(self.layout)
。