在滚动区域小部件的 PyQt5 中添加 n 列

Posted

技术标签:

【中文标题】在滚动区域小部件的 PyQt5 中添加 n 列【英文标题】:Add n amount of columns in PyQt5 at a scroll area widget 【发布时间】:2019-08-13 11:06:05 【问题描述】:

我需要在滚动区域或类似区域内创建 n 个小部件,并且这些小部件应包含标签和删除按钮或类似部件。我还没有实现如何获得 n 数量的标签,它们没有显示出来。

这应该添加小部件:

name = QtWidgets.QLabel()
name.setText(str(ui.nombre.toPlainText))
ui.elementos.addWidget(name, 0, 0, 1, 1)

这就是定义“elementos”的地方:

self.scroll = QtWidgets.QScrollArea(self.gridLayoutWidget_2)
self.elementos = QtWidgets.QGridLayout()
self.elementos.setGeometry(QtCore.QRect(0, 0, 500, 400))
self.Punto.addWidget(self.scroll, 4, 0, 1, 3)

Punto 在这里定义:

self.gridLayoutWidget_2 = QtWidgets.QWidget(self.widget_central)
self.gridLayoutWidget_2.setGeometry(QtCore.QRect(1004, 105, 300, 400))
self.Punto = QtWidgets.QGridLayout(self.gridLayoutWidget_2)

完整代码:https://github.com/Jaime02/Proyecto-de-investigacion-2019-Dibujo-tecnico/blob/experimental/error

【问题讨论】:

您创建的所有标签都使用ui.elementos.addWidget(name, 0, 0, 1, 1) 吗?如果是这样,您将它们都放在网格布局中的相同位置。 @Heike 我知道,但我看不到任何小部件,至少应该有一个 您是否将ui.elementos 设置为主要小部件的布局?或者更好的是,发布minimal reproducible example。 @Heike 不,它包含在“Punto”网格布局中 【参考方案1】:

您正在创建一个网格布局并向其中添加小部件,但您没有将网格布局用作任何小部件的布局。要在滚动区域显示网格布局,您需要创建一个单独的小部件,将该小部件的布局设置为网格布局并在滚动区域显示小部件,例如在UiVentana.__init__你需要替换

self.scroll = QtWidgets.QScrollArea(self.gridLayoutWidget_2)
self.elementos = QtWidgets.QGridLayout()
self.elementos.setGeometry(QtCore.QRect(0, 0, 500, 400))

self.scroll = QtWidgets.QScrollArea(self.gridLayoutWidget_2)

# create widget to display in scroll area
self.scroll_widget = QtWidgets.QWidget()
self.scroll_widget.resize(500, 400)

# create grid layout and use it as the layout of self.scroll_widget
self.elementos = QtWidgets.QGridLayout()
self.scroll_widget.setLayout(self.elementos)

# display self.scroll_widget in the scroll area
self.scroll.setWidget(self.scroll_widget)

此外,在Renderizador.crear_punto 中,您需要使用name.setText(str(ui.nombre.toPlainText()))(带括号)而不是name.setText(str(ui.nombre.toPlainText))

【讨论】:

我已经完成了,但是现在滚动条出现在网格的顶部,并且非常小 我已经部分修复它添加 self.Punto.addWidget(self.scroll, 4, 0, 1, 1) 您似乎替换了太多行。您应该保留原始代码中的self.Punto.addWidget(self.scroll, 4, 0, 1, 3) 行。

以上是关于在滚动区域小部件的 PyQt5 中添加 n 列的主要内容,如果未能解决你的问题,请参考以下文章

在颤振地图功能在列小部件中不起作用

将小部件添加到滚动区域会导致它们堆叠在一起

如何在 PyQt5 Python 中更改表格小部件中滚动条的颜色

无法居中列小部件

如何将一列小部件紧紧包裹在卡片中?

如何使用中心和列小部件内的对齐小部件在底部有两个按钮?