【发布时间】:2019-09-15 04:07:02
【问题描述】:
我正在学习 pyqt,并试图在小部件中间制作一段文本,当小部件大小根据小部件窗口的大小更改时,它会更改字体大小。我有一些我想要的东西,除了当水平扩展窗口时,在某个点,它也会自动垂直扩展窗口。
我怀疑它与填充有关。水平拖动窗口大小时所需的行为是让文本按比例缩放,直到它会导致窗口的垂直尺寸发生变化,此时不再更改字体大小。
下面是到目前为止我用一堆打印语句来计算大小的结果,但由于某种原因,没有任何东西与窗口的大小相匹配。
from PyQt5.QtWidgets import (QWidget,QHBoxLayout,QLabel,QApplication,QSizePolicy)
from PyQt5.QtGui import QFont, QFontMetrics
from PyQt5.QtCore import Qt,pyqtSignal
import sys
class alarm(QWidget):
resized = pyqtSignal()
def __init__(self):
super().__init__()
self.setGeometry(300, 300, 150, 150)
self.setWindowTitle("Alarm Clock")
self.init_UI()
def init_UI(self):
self.counter = 0
self.resized.connect(self.set_font_size)
self.time = QLabel('Test')
self.time.setFont(QFont('Times New Roman'))
self.time.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)
self.time.setAlignment(Qt.AlignCenter)
hbox = QHBoxLayout()
hbox.addWidget(self.time)
self.setLayout(hbox)
def resizeEvent(self,event):
self.resized.emit()
def set_font_size(self):
curr_geo = self.geometry().width()
font = self.time.font()
curr_pixel_size = font.pixelSize()
new_pixel_size = curr_geo/3
font.setPixelSize(new_pixel_size)
t = self.time.contentsRect().height()
print('Label contents rect: ',t)
print('label height: ' + str(t))
new_bounding = QFontMetrics(font).boundingRect(self.time.text())
print('New bounding: ' + str(new_bounding.height()))
print('Total height: ' + str(self.geometry().height()))
if new_bounding.height() > self.geometry().height():
font.setPixelSize(curr_pixel_size)
self.time.setFont(font)
else:
font.setPixelSize(new_pixel_size)
self.time.setFont(font)
if __name__ == "__main__":
app = QApplication([])
alarm = alarm()
alarm.show()
sys.exit(app.exec_())
【问题讨论】: