내 응용 프로그램에는 여러 개의 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
에있는 것 같습니다. 다른면에서 나는 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