python中fontsize_在PyQ中同步标签fontsize和布局

该博客介绍了一个PyQt实现,通过重写resizeEvent方法,使QLabel的字体大小能根据内容区域动态调整。关键在于设置QLabel的sizePolicy为Ignored,并在resizeEvent中计算适应内容区域的字体大小。示例代码展示了一个自定义的myQLabel类,能自动调整字体以适应布局变化。
摘要由CSDN通过智能技术生成

这包含在resizeEvent方法的重新实现中,QLabel的字体大小根据其contentRect的大小进行更新。注意,Qlabel的sizePolicy必须设置为Ignored,这样才能正常工作。在import sys

from PyQt4 import QtGui

class myQLabel(QtGui.QLabel):

def __init__(self, *args, **kargs):

super(myQLabel, self).__init__(*args, **kargs)

self.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored,

QtGui.QSizePolicy.Ignored))

self.setMinSize(14)

def setMinSize(self, minfs):

f = self.font()

f.setPixelSize(minfs)

br = QtGui.QFontMetrics(f).boundingRect(self.text())

self.setMinimumSize(br.width(), br.height())

def resizeEvent(self, event):

super(myQLabel, self).resizeEvent(event)

if not self.text():

return

# - fetch current parameters

f = self.font()

cr = self.contentsRect()

# - find the font size that fits the contentsRect -

fs = 1

while True:

f.setPixelSize(fs)

br = QtGui.QFontMetrics(f).boundingRect(self.text())

if br.height() <= cr.height() and br.width() <= cr.width():

fs += 1

else:

f.setPixelSize(max(fs - 1, 1)) # backtrack

break

# - update font size -

self.setFont(f)

class myApplication(QtGui.QWidget):

def __init__(self, parent=None):

super(myApplication, self).__init__(parent)

# Prepare a Layout

grid = QtGui.QGridLayout()

for i in range(3):

grid.addWidget(myQLabel('some text'), i, 0)

grid.setRowStretch(i, i+1)

grid.setRowMinimumHeight(i, 25)

self.setLayout(grid)

self.resize(500, 300)

if __name__ == '__main__':

app = QtGui.QApplication(sys.argv)

instance = myApplication()

instance.show()

sys.exit(app.exec_())

结果是:

更新-resizeEvent优化:

下面是resizeEvent方法的优化版本,它应该可以产生更好的性能。它大大减少了寻找字体大小的最佳值所需的迭代次数。不过,我还没有做过广泛的测试。在

^{pr2}$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值