2014-10-30 4 views
2

QTextEdit의 글꼴을 QTreeWidget과 같게 설정하려고합니다.명백한 이유없이 QTextEdit의 글꼴 설정이 무시됩니다.

QTextEdit에서 글꼴을 가져 와서 QTreeWidget으로 설정하려고하면 작동하지 않습니다. 그러나 QTreeWidget이 내 플랫폼 (Windows 7)에 있고 QTextEdit으로 설정된 새로운 글꼴 QFont("Segoe UI", 9)을 만들면 작동합니다.

다음 코드는 글꼴 비교에 True을 인쇄하지만 예상대로 작동하지 않습니다. self.text.setFont(new_font)의 주석을 제거하면 수정됩니다. 왜?

import string 
import sys 

from PyQt5.QtWidgets import * 
from PyQt5.QtGui import QFont 


TEXT = string.printable[:-5] 

def print_font(font): 
    print("Family: {}, Size: {}".format(font.family(), font.pointSize())) 


class Window(QWidget): 
    def __init__(self, *args, **kwargs): 
     QWidget.__init__(self, *args, **kwargs) 

     self.list = QTreeWidget(self) 
     self.list.addTopLevelItem(QTreeWidgetItem((TEXT,))) 
     self.list.setRootIsDecorated(False) 
     self.list.setHeaderHidden(True) 
     self.list.setMinimumHeight(25) 

     self.text = QTextEdit(self) 
     self.text.setText(TEXT) 
     self.text.setMinimumHeight(25) 

     self.layout = QGridLayout() 
     self.layout.setContentsMargins(5, 5, 5, 5) 
     self.layout.addWidget(self.list) 
     self.layout.addWidget(self.text) 

     self.resize(620, 20) 
     self.setLayout(self.layout) 
     self.show() 

     list_font = self.list.font() 
     new_font = QFont("Segoe UI", 9) 
     print(list_font == new_font) 
     self.text.setFont(list_font) 
#   self.text.setFont(new_font) 

     print_font(self.list.font()) 
     print_font(self.text.font()) 


app = QApplication(sys.argv) 
win = Window() 
sys.exit(app.exec_()) 

답변

2

실제로 QFont에서보고 한 속성이 실제로 사용 된 것과 동일하다고 가정 할 수 없습니다. 그럴 수도 있지만 보증 할 수는 없습니다.

실제로 사용 된 실제 값을 얻으려면 QFontInfo을 사용해야합니다. 리눅스에서는 QFont와 QFontInfo와는 다른 값을 가지지 만 폰트 전송은 성공합니다. Windows에서는 같지만 전송이 실패합니다. 허.

어쨌든 Windows에서 글꼴을 복사 할 때 약간의 문제가있는 것으로 보이지만 정확히 무엇이 될지 진단 할 수는 없습니다. 글꼴 캐시와 관련이 있을지도 모릅니다. 아마도?

list_font = QFont(self.list.font()) 

이 차이를 만들 수있는 -하지만하지 않습니다

나는 생각했다. 결국 Windows에서 나를 위해 일한 유일한 방법은 다음과 같습니다.

list_font = QFont() 
    list_font.fromString(self.list.font().toString()) 
    self.text.setFont(list_font) 
+0

좋은 통찰력. 감사. – Fenikso

관련 문제