如何将三重行(‘\u 2261’)放置到帧的顶部。我的第一帧是黄色的,Qlabel文本是放在框架顶部的"Python“。同样,我需要将Unicode字符'u\2261'放在第二帧的顶部(浅绿色的顶部边缘)。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class QLab(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QLabel Example")
self.frame_top = QFrame()
self.frame_top.setObjectName("ob_frame_top")
self.color_top = "yellow"
self.frame_top.setStyleSheet(f"QFrame#ob_frame_top{{background-color: {self.color_top};}}")
self.frame_top.setFixedHeight(30)
self.frame_mid = QFrame()
self.frame_mid.setObjectName("ob_frame_mid")
self.color_mid = "lightgreen"
self.frame_mid.setStyleSheet(f"QFrame#ob_frame_mid{{background-color: {self.color_mid};}}")
self.frame_mid.setFixedHeight( 100)
self.frame_all = QFrame()
self.lay_top = QVBoxLayout()
self.lay_mid = QVBoxLayout()
self.lay_all = QVBoxLayout()
self.lay_top = QVBoxLayout(self.frame_top)
self.lay_mid = QVBoxLayout(self.frame_mid)
self.lay_all = QVBoxLayout(self.frame_all)
lbl1 = QLabel("Python")
self.lay_top.addWidget(lbl1)
self.lay_top.setContentsMargins(0,0,0,0)
self.lay_top.setAlignment(Qt.AlignTop)
lbl2 = QLabel('\u2261'*8)
my_font = QFont("Arial Black", 15)
lbl2.setFont(my_font)
self.lay_mid.addWidget(lbl2)
self.lay_mid.setContentsMargins(0,0,0,0)
self.lay_mid.setAlignment(Qt.AlignTop )
self.lay_mid.addStretch()
self.lay_all.setSpacing(0)
self.lay_all.addWidget(self.frame_top)
self.lay_all.addWidget(self.frame_mid)
self.lay_all.addStretch()
self.setLayout(self.lay_all)
def main():
app = QApplication(sys.argv)
ex = QLab()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()发布于 2022-04-10 19:51:53
这是基于所选字体的字符定位。
因为它是一个位于字体基线上的字符,通常不是很高,所以总是有一定的间距,就像任何其他“小”字符一样,比如"x“或"a”。
QLabel总是尝试显示文本的完整边界矩形,因此唯一的选项是手动强制填充到用当前字体的QFontMetrics计算的负值:您需要用ascent()减去字体的xHeight()。
但是,请注意,结果绝对不能保证,因为这完全取决于字体如何绘制特定字符:如果您使用的字体由于某种原因显示字符比其他小字符高,内容可能会被部分隐藏;如果字体较小(或显示在基线下面),则上面仍会有一些空白。
lbl2 = QLabel('\u2261'*8)
my_font = QFont("Arial Black", 15)
fm = QFontMetrics(my_font)
padding = fm.xHeight() - fm.ascent()
lbl2.setStyleSheet('margin-top: {}px;'.format(padding))
lbl2.setFont(my_font)https://stackoverflow.com/questions/71817503
复制相似问题