在QScrollArea中对齐QGridLayout行

时间:2019-08-13 22:20:14

标签: python-3.x alignment pyqt5 qscrollarea qgridlayout

我正在尝试在PyQt5网格小部件中创建很多行,但是它们尝试尽可能多地扩展。如何设置固定的单元格高度?它们的表示方式如下:

enter image description here

但是我希望他们坚持在顶部,像这样订购:

enter image description here

代码:

name = QtWidgets.QLabel()
name.setText(str(ui.nombre.toPlainText()) + "({}, {}, {})".format(do, cota, alejamiento))
borrar = QtWidgets.QPushButton()
borrar.setText("X")
borrar.clicked.connect(self.borrar)
ui.elementos.addWidget(name, self.num_elementos, 0, 1, 1)
ui.elementos.addWidget(borrar, self.num_elementos, 1, 1, 1)
self.num_elementos += 1
self.update()
print(self.puntos)

然后在其他类中创建了elementos小部件:

self.scroll = QtWidgets.QScrollArea(self.gridLayoutWidget_2)
self.scroll_widget = QtWidgets.QWidget()
self.scroll_widget.resize(200, 700)
self.elementos = QtWidgets.QGridLayout()
self.scroll_widget.setLayout(self.elementos)
self.scroll.setWidget(self.scroll_widget)
self.Punto.addWidget(self.scroll, 4, 0, 1, 3)

1 个答案:

答案 0 :(得分:1)

您需要在小部件行下方添加一个可伸缩的空间,以便将其全部推到顶部。一种方法是将另一个小部件放在滚动小部件内,然后使用垂直布局添加间隔符。如果您make the scroll-widget resizable,也将有所帮助,否则,如果添加的行太多,行将开始被压缩。

下面是一个演示了所有内容的演示。希望应该弄清楚如何使它适应于您自己的代码:

import sys
from PyQt5 import QtCore, QtWidgets

class Window(QtWidgets.QWidget):
    def __init__(self):
        super(Window, self).__init__()

        self.scroll = QtWidgets.QScrollArea()
        self.scroll.setWidgetResizable(True)
        self.scroll_widget = QtWidgets.QWidget()
        self.scroll_widget.setMaximumWidth(200)
        self.elementos_widget = QtWidgets.QWidget()
        vbox = QtWidgets.QVBoxLayout(self.scroll_widget)
        vbox.setContentsMargins(0, 0, 0, 0)
        vbox.addWidget(self.elementos_widget)
        vbox.addStretch()

        self.elementos = QtWidgets.QGridLayout()
        self.elementos_widget.setLayout(self.elementos)
        self.scroll.setWidget(self.scroll_widget)

        self.button = QtWidgets.QPushButton('Add')
        self.button.clicked.connect(self.crear_punto)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.scroll)
        layout.addWidget(self.button)

    def crear_punto(self):
        num_elementos = self.elementos.rowCount()
        name = QtWidgets.QLabel()
        name.setText('FOO %s' % num_elementos)
        borrar = QtWidgets.QPushButton()
        borrar.setText('X')
        self.elementos.addWidget(name, num_elementos, 0)
        self.elementos.addWidget(borrar, num_elementos, 1)

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 100, 300, 500)
    window.show()
    sys.exit(app.exec_())