python - PyQt5 相当于 WPF StackPanel

标签 python layout pyqt pyqt5

我正在使用 PyQt5,并且希望将一些控件堆叠在一起。我希望这些控件能够根据其内容确定自己的大小。例如,如果我有三个按钮,内容分别为“一”、“二二”和“三三三”,则第一个按钮应该是最小的,在左上角,第二个按钮应该紧邻第一个按钮,稍宽一些,等等。应该提到的是,这些将被放置在 QScrollArea 中,您可以期待数百个堆叠的项目。

我尝试过QVBoxLayout,但所有按钮都具有相同的尺寸,在屏幕上拉伸(stretch),如果没有足够的空间来填充父级,则会 float 在中间。

最佳答案

您可以在QVboxLayout中设置小部件的对齐方式,以阻止它们拉伸(stretch)以适应宽度。您还可以在布局的末尾添加一个可拉伸(stretch)的间隔符,以阻止小部件垂直间隔开。

当放入滚动区域时,它将如下所示:

screenshot

这是一个简单的演示:

import sys
from PyQt5 import QtCore, QtWidgets

class Window(QtWidgets.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        scroll = QtWidgets.QScrollArea()
        widget = QtWidgets.QWidget(scroll)
        vbox = QtWidgets.QVBoxLayout(widget)
        for index in range(5):
            for text in 'One', 'Two Two', 'Three Three Three':
                button = QtWidgets.QToolButton()
                button.setText('%s %s' % (text, index))
                vbox.addWidget(button, 0, QtCore.Qt.AlignLeft)
        vbox.addStretch()
        scroll.setWidget(widget)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(scroll)

if __name__ == '__main__':

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

关于python - PyQt5 相当于 WPF StackPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54166351/

相关文章:

python - 如何在剔除不良序列的同时生成排列?

python - Pandas 为每个字符拆分数据框列

android - 默认 PIN 锁屏布局

java - 如何在 JPanel 中的两个组件之间创建空间

android - 当 Android 自动退出沉浸式粘性时,它不会调整 View 大小,因此它们会被阻止

python - QWebView : is it possible to highlight terms and do keyboard navigation?

python - PyQt QSplitter setSizes 用法

python - 如何更改标签、行编辑等相对于窗口大小的位置?

python - requests.get 不返回网页

Python:替换字符串中的特定字符(重复问题)