如何在 PyQt5 布局中更紧密地对齐两个小部件?

Posted

技术标签:

【中文标题】如何在 PyQt5 布局中更紧密地对齐两个小部件?【英文标题】:How to align two widgets more closely in PyQt5 layouts? 【发布时间】:2021-10-12 11:50:06 【问题描述】:

如何更紧密地对齐两个小部件?在我的代码中,我想更紧密地对齐 QLabel 1 和 QLabel 2(即 QLabel 2 在 QLabel 1 下方对齐,间距最小)。

import sys
from PyQt5 import QtCore,QtGui,QtWidgets

class Layout_sample(QtWidgets.QWidget):
    def __init__(self):
        super(). __init__()
        self.setWindowTitle("Layout Sample")
        self.vbox = QtWidgets.QVBoxLayout()
        self.lbl1 = QtWidgets.QLabel("F3")
        self.lbl2 = QtWidgets.QLabel(u'\u2550'+u'\u2550')

        self.vbox.addStretch()
        self.vbox.addWidget(self.lbl1)
        self.vbox.addWidget(self.lbl2)
        self.vbox.addStretch()

        self.vbox.setSpacing(0)
        self.setLayout(self.vbox)


if __name__ =="__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainwindow = Layout_sample()
    mainwindow.show()
    sys.exit(app.exec_())

【问题讨论】:

【参考方案1】:

我假设您想要实现的是第一个标签中的文本的双下划线。您的示例的问题是 unicode 字符 (U+2550) 垂直居中,因此其上方总会有一些固定空间。 unicode box-drawing characters 不包含顶部对齐的双下划线,因此需要采用不同的方法。

一种解决方案是在标签内使用 html/css 在文本下方绘制双边框。这必须使用表格单元来完成,因为 Qt 只支持 limited subset of html/css:

    underline = """<td style="
        border-bottom-style: double;
        border-bottom-width: 3px;
        ">%s</td>"""
    self.lbl1 = QtWidgets.QLabel(underline % 'F3')
    self.vbox.addStretch()
    self.vbox.addWidget(self.lbl1)
    self.vbox.addStretch()

【讨论】:

以上是关于如何在 PyQt5 布局中更紧密地对齐两个小部件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在PyQt5中叠加小部件?

PyQt5 - 动态添加小部件到布局

在小部件 PyQt5 上设置布局后更改布局

如何在 PyQt5 中为 QGridLayout 添加拉伸?

Pyqt5 addStretch 在小部件之间?

如何在pyqt5中连续插入2个以上的小部件