1

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 フォント ダイアログ ボックスを開きます。これを実行すると、ダイアログ ボックスでフォント サイズを変更すると、テーブルのヘッダーとボタンのテキストのサイズが変更されることがわかります。ただし、フォント サイズが固定されているラベルは変更されません。フォント サイズの変更に合わせてサイズを変更したい場合はどうすればよいですか? これらのウィジェットのフォントのサイズを「スケーリング」するにはどうすればよいですか?

4

1 に答える 1

1

これまでに私が見つけた唯一の解決策は、各ウィジェットの倍率を作成し、フォントを変更するときに、この処理が必要なすべてのウィジェットを繰り返し、フォントを個別にスケーリングすることです。これは機能し、単純な 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_())
于 2019-08-30T17:46:01.490 に答える