2016-12-03 10 views
1

私のアプリケーションでは、複数の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にあるようです。反対側で私はPySidePyQt4QtWidgetsQtGuiを置き換えた)と同じテストし、期待どおりに動作します。したがって、PyQt5のエラーか、何か間違っていますか?

+0

LinuxでQt-4.8.7とPySide-1.2.4/PyQt-4.11.4を使用してこれを再現することはできません。あなたは問題を示す[mcve]を提供できますか?どのプラットフォームを使用していますか、QtとPySide/PyQtの特定のバージョンを使用していますか? – ekhumoro

+0

私は問題を最小限に抑えようとしましたが、問題が他の場所にあると私は思っていました。特定の行で 'QPlainTextEdit'のフォントを明示的に設定しているため、アプリケーションフォントが伝播していないことがわかりました。そして、特定のウィジェットクラスに対してアプリケーションフォントがアプリケーション全体に変更されたときに見つかったように、独自のフォントセットを持つウィジェットには伝播されません。 申し訳ありませんが、この質問は誤解を招くため、すぐに削除する予定です。 –

+0

よろしいですか。他の人が恩恵を受ける可能性があるので、あなたのコメントを回答に入れる方が良いでしょう。 – ekhumoro

答えて

0

この動作はPyQt-5.7で確認できます。

同じ問題がlatest development snapshot(PyQt5_gpl-5.7.1.dev1611251257)に表示されないため、バグのようです。 PyQt-5.7.1がリリースされるまで、現在の回避策を使わなければならないようです。

関連する問題