在滚动区域小部件的 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 列的主要内容,如果未能解决你的问题,请参考以下文章