2016-12-03 1 views
1

내 응용 프로그램에는 여러 개의 QPlainTextEdit 위젯이있을 수 있습니다. 또한이 위젯의 ​​글꼴에 대한 전역 설정이 있고 전역 설정에서이 글꼴을 변경할 때 새로운 글꼴이 내 응용 프로그램의 모든 기존 QPlainTextEdit 인스턴스에 자동으로 전파되기를 원합니다. QApplication.setFont(font, "QPlainTextEdit")을 사용해야 할 수도 있지만 위젯의 다른 유형에서는 작동하지만, QPlainTextEdit에서는 작동하지 않는 것 같습니다.QPlainTextEdit 응용 프로그램 용 글꼴을 설정하는 방법

내 현재 근무처는 매우 hackish하다고 느낍니다. 내가 서브 클래스 CodeEditWidget와이 해킹 가지고 이름, 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) 

글쎄, 그것은 작동하지만 난 아주 많이 그것을 좋아하지 않아. 물론 나는 그것을 자동으로 전파하는 것을 선호 할 것이다. 그리고 그게 가능하지 않다면, 나는 그것을 유지하고 일부 글로벌 설정과 함께 전달하지 않는 것을 선호합니다. 그게 가능하니? 이 event() 함수 내에서 표준 글꼴로 설정할 글꼴을 어떻게 얻습니까?

업데이트 :

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에있는 것 같습니다. 다른면에서 나는 PySidePyQt4 (QtWidgetsQtGui으로 대체 됨)과 같은 것을 테스트했으며 예상대로 작동합니다. 그래서 그것은 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이 출시 될 때까지 현재의 work-around를 사용해야 할 것 같습니다.

관련 문제