QVBoxLayout无法使用QWidget和QVBoxLayout创建QScrollArea到QWidget

问题描述 投票:-1回答:1

我有这个代码:

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,它仍然无法正常工作。

python pyqt5
1个回答
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名称。

Widget最初有setLayout()方法。和layout()方法。如果你使self.layout = ***,你就会粉碎QWidget的原始方法。

它也可以删除new1new2方法。

请直接打电话给他们。

请查看create_scroll_area方法。

你制作了三个widget.QScrollAreaQWidgetQPushButton。并制作一个布局对象。然后将布局设置为QWidget。但是在小部件设置布局之前设置QWidget。这不是编码的好顺序。

你制作QPushButton但按钮不属于任何小部件。因为你肯定在self.layout上设置了按钮,但是如果要显示它,你必须在最后一个位置使用setLayout(self.layout)

© www.soinside.com 2019 - 2024. All rights reserved.