私のアプリケーションでは、複数のQPlainTextEdit
ウィジェットがあるかもしれません。このウィジェットのフォントのグローバル設定もあります。グローバル設定でこのフォントを変更すると、新しいフォントがアプリケーションのすべての既存のQPlainTextEdit
インスタンスに自動的に伝播されます。私はおそらくQApplication.setFont(font, "QPlainTextEdit")
を使用する必要がありますが、これは他のタイプのウィジェットでは有効ですが、QPlainTextEdit
では使用できません。QPlainTextEditアプリケーション全体のフォントを設定する方法
私の現在の作業員は非常にハックを感じています。
def event(self, event):
if event.type() == QtCore.QEvent.ApplicationFontChange:
self.setFont(Settings.codeFont) # I need to keep the font in some global place
return super(CodeEditWidget, self).event(event)
まあ、それは動作しますが、私はそれを非常に好きではない:私は、サブクラスCodeEditWidget
と、このハックを持っていることという名前の、QPlainTextEdit
をオーバーライドしています。もちろん私はそれを自動的に伝播することを好むだろう。それが不可能な場合、私はそれを保持し、いくつかのグローバル設定で渡す必要はありません。それは可能ですか?このevent()
の中でフォントを標準的に機能させるにはどうすればいいですか?
UPDATE:私はこのスニペットに問題を絞り込む:
import sys
from PyQt5 import QtGui, QtWidgets
class MyText(QtWidgets.QPlainTextEdit):
pass
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super(MyWidget, self).__init__()
text1 = QtWidgets.QPlainTextEdit()
text1.setPlainText("AAA")
text2 = MyText()
text2.setPlainText("AAA")
button = QtWidgets.QPushButton("Push to change font")
button.clicked.connect(self.onButtonClicked)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(text1)
layout.addWidget(text2)
layout.addWidget(button)
def onButtonClicked(self):
font = QtGui.QFont("Courier", 20)
# QtWidgets.QApplication.setFont(font, "QPlainTextEdit")
QtWidgets.QApplication.setFont(font, "MyText")
app = QtWidgets.QApplication(sys.argv)
mainWindow = MyWidget()
mainWindow.show()
result = app.exec_()
sys.exit(result)
コメントアウトされたラインは、両方のエディットボックスのフォントを変更しますが、setFont(font, "MyText")
と行が何もしません。
この問題はPyQt5
にあるようです。反対側で私はPySide
とPyQt4
(QtWidgets
とQtGui
を置き換えた)と同じテストし、期待どおりに動作します。したがって、PyQt5
のエラーか、何か間違っていますか?
LinuxでQt-4.8.7とPySide-1.2.4/PyQt-4.11.4を使用してこれを再現することはできません。あなたは問題を示す[mcve]を提供できますか?どのプラットフォームを使用していますか、QtとPySide/PyQtの特定のバージョンを使用していますか? – ekhumoro
私は問題を最小限に抑えようとしましたが、問題が他の場所にあると私は思っていました。特定の行で 'QPlainTextEdit'のフォントを明示的に設定しているため、アプリケーションフォントが伝播していないことがわかりました。そして、特定のウィジェットクラスに対してアプリケーションフォントがアプリケーション全体に変更されたときに見つかったように、独自のフォントセットを持つウィジェットには伝播されません。 申し訳ありませんが、この質問は誤解を招くため、すぐに削除する予定です。 –
よろしいですか。他の人が恩恵を受ける可能性があるので、あなたのコメントを回答に入れる方が良いでしょう。 – ekhumoro