Python 将标签fontsize与PyQt中的布局同步
通过信号/插槽更改标签字体大小以匹配其所包含的布局大小的具体方法是什么?下面是一个解决方案,用于Python 将标签fontsize与PyQt中的布局同步,python,python-3.x,pyqt,pyqt4,Python,Python 3.x,Pyqt,Pyqt4,通过信号/插槽更改标签字体大小以匹配其所包含的布局大小的具体方法是什么?下面是一个解决方案,用于QLabel,源自此处发布的解决方案: 这包括重新实现resizeEvent方法,其中根据contentRect的大小更新QLabel的字体大小。请注意,Qlabel的sizePolicy必须设置为Ignored,才能正常工作 import sys from PyQt4 import QtGui class myQLabel(QtGui.QLabel): def __init__(
QLabel
,源自此处发布的解决方案:
这包括重新实现resizeEvent
方法,其中根据contentRect
的大小更新QLabel
的字体大小。请注意,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_())
下面是一个针对
QLabel
的解决方案,它是从此处发布的解决方案派生而来的:
这包括重新实现resizeEvent
方法,其中根据contentRect
的大小更新QLabel
的字体大小。请注意,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_())
如何为标签指定初始尺寸?忽略大小策略后是否可能?嗯,标签的初始大小将主要由应用程序的布局端决定。但是我可以看到,在标签上设置一个最小的大小是很有用的,这样它就不会因为拉伸UI的其他元素而崩溃。请参阅更新的示例。如何为标签指定初始大小?忽略大小策略后是否可能?嗯,标签的初始大小将主要由应用程序的布局端决定。但是我可以看到,在标签上设置一个最小的大小是很有用的,这样它就不会因为拉伸UI的其他元素而崩溃。请参见更新的示例。