python - 如何为小部件创建不同的字体大小但允许它们在 PySide2 中使用字体对话框进行缩放?
问题描述
假设我有 3 个标签,每个标签都应该有不同大小的文本。检查此示例代码:
import sys
from PySide2 import QtCore, QtGui, QtWidgets
def Fonty():
ok, font = QtWidgets.QFontDialog.getFont(tableWidget)
if ok:
app.setFont(font)
tableWidget.resizeColumnsToContents()
tableWidget.resizeRowsToContents()
app = QtWidgets.QApplication(sys.argv)
tableWidget = QtWidgets.QTableWidget()
tableWidget.setColumnCount(4)
tableWidget.setRowCount(1)
for x in range(3):
label = QtWidgets.QLabel(tableWidget)
font = QtGui.QFont()
size = 8 + (x * 2)
font.setPointSize(size)
label.setFont(font)
label.setText("Testing")
tableWidget.setCellWidget(0, x, label)
tableWidget.resizeColumnsToContents()
pushButton = QtWidgets.QPushButton()
pushButton.setText("Fonts")
pushButton.clicked.connect(Fonty)
tableWidget.setCellWidget(0, 3, pushButton)
tableWidget.resizeColumnsToContents()
tableWidget.show()
sys.exit(app.exec_())
标有“字体”的按钮将打开一个标准的 Qt 字体对话框。当我运行它时,我可以看到当我通过对话框更改字体大小时,表格的标题和按钮中的文本会改变大小。但是具有固定字体大小的标签不会改变。如果我希望它们随着字体大小的变化而改变大小怎么办?如何“缩放”这些小部件的字体大小?
解决方案
到目前为止,我想出的唯一解决方案是为每个小部件创建一个比例因子,然后在更改字体时,遍历所有需要这种处理的小部件并单独缩放它们的字体。这对一个简单的 GUI 来说是可行的,而且还不错。如果有很多小部件并且类型不同,这可能会很麻烦,因为 findChildren 函数可能会有点麻烦。我很想知道是否有更好的方法来做到这一点。也许有一个我还没有找到的 Qt 方法?
import sys
from PySide2 import QtCore, QtGui, QtWidgets
def Fonty():
ok, font = QtWidgets.QFontDialog.getFont(tableWidget)
if ok:
app.setFont(font)
size = font.pointSize()
children = tableWidget.findChildren(QtWidgets.QLabel)
for child in children:
font.setPointSize(size * child.scaleF)
child.setFont(font)
tableWidget.resizeColumnsToContents()
tableWidget.resizeRowsToContents()
app = QtWidgets.QApplication(sys.argv)
fontsize = app.font().pointSize()
tableWidget = QtWidgets.QTableWidget()
tableWidget.setColumnCount(4)
tableWidget.setRowCount(1)
for x in range(3):
label = QtWidgets.QLabel(tableWidget)
font = QtGui.QFont()
size = 8 + (x * 2)
label.scaleF = size/fontsize
font.setPointSize(size)
label.setFont(font)
label.setText("Testing")
tableWidget.setCellWidget(0, x, label)
tableWidget.resizeColumnsToContents()
pushButton = QtWidgets.QPushButton()
pushButton.setText("Fonts")
pushButton.clicked.connect(Fonty)
tableWidget.setCellWidget(0, 3, pushButton)
tableWidget.resizeColumnsToContents()
tableWidget.show()
sys.exit(app.exec_())
推荐阅读
- ios - 检查 Swift 4 中的本地文件大小
- ios - 在 iOS 中自定义逐帧动画
- reactjs - 为路线使用正则表达式而苦苦挣扎
- lua - LOVE2D 映射像素错误
- mysql - 当第一行被“包围”时,MySQL LOAD DATA LOCAL INFILE 什么都不做
- cs-cart - 如何通过 API 在 cs 购物车中按名称获取 category_id?
- objective-c - 后台进程的目标 C 代码
- docker - Docker-compose:exec用户进程导致“没有这样的文件或目录”但文件存在
- css - 两列,一列可滚动
- c# - C#设置接收超时(最佳/充足时间)