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

How to align two widgets more closely in PyQt5 layouts?

如何更紧密地对齐两个小部件?在我的代码中,我想更紧密地对齐 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_())

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

一种解决方案是在标签内使用 html/css 在文本下方绘制双边框。这必须使用 table-cell 来完成,因为 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()