python - 无法使用 QWidget 和 QVBoxLayout 创建 QScrollArea 到使用 QVBoxLayout 的 QWidget
问题描述
我有这个代码:
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
.
4.也可以删除new1
和new2
方法。
请直接打电话给他们。
5.请看create_scroll_area
方法。
你做了三个小部件。QScrollArea
, QWidget
, QPushButton
. 并制作一个布局对象。然后将布局设置为QWidget
. 但是您QWidget
在小部件设置布局之前设置了。编码顺序不好。
您制作QPushButton
但按钮不属于任何小部件。因为你把按钮设置在了self.layout
肯定的,但是如果你想显示它,你必须setLayout(self.layout)
在最后一个位置。
推荐阅读
- python - python:根据几列过滤熊猫数据文件
- android - 带有不需要的视差的协调器布局滚动
- ckeditor - 指定 FOS CKEditor 中可用的自定义颜色
- excel-formula - 搜索多个单元格
- generics - 使用通用功能执行 api 调用,使用 rxjava 结合平面地图运算符
- cobol - Cobol 文件状态 9 是什么意思?
- swift - 将所有值放入字典并创建具有特定格式的字符串
- phpspreadsheet - SUMIFS 使用 PHPSpreadsheet 破坏电子表格
- c++ - 就地 new + reinterpret_cast
- microsoft-graph-api - Microsoft Graph API 获取与内容类型关联的列列表