2016-09-05 14 views
1

PyQt GUI内のQLabel()のフォントサイズがそれほど一貫していないことに気付きました。以下の例を見てみましょう。私は簡単なテストのための完全なpythonファイルを書いた。このコードを実行した場合、これはあなたが得るものです短いHTMLテキストを挿入するとQLabelフォントが異なる

from PyQt5.QtWidgets import * 
from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
import sys 
import os 

'''---------------------------------------------------------------------''' 
'''                  ''' 
'''      T E S T I N G        ''' 
'''                  ''' 
'''---------------------------------------------------------------------''' 


class TestWindow(QMainWindow): 
    def __init__(self): 
     super(TestWindow, self).__init__() 

     # 1. Set basic geometry and color. 
     # -------------------------------- 
     self.setGeometry(100, 100, 800, 600) 
     self.setWindowTitle('Hello World') 
     palette = QPalette() 
     palette.setColor(QPalette.Window, QColor(200,200,200)) 
     self.setPalette(palette) 
     self.show() 

     # 2. Create the central frame. 
     # ---------------------------- 
     self.centralFrame = QFrame(self) 
     self.centralFrame.setFrameShape(QFrame.NoFrame) 
     self.centralLayout = QVBoxLayout() 
     self.centralFrame.setLayout(self.centralLayout) 
     self.centralLayout.setSpacing(5) 
     self.centralLayout.setContentsMargins(20,20,20,20) 
     self.setCentralWidget(self.centralFrame) 

     # 3. Do the test. 
     # ---------------- 
     # TEST CASE 1 
     # The label with html 
     self.infoLbl = QLabel() 
     self.infoLbl.setTextFormat(Qt.RichText) 
     self.infoLbl.setFrameShape(QFrame.StyledPanel) 
     self.infoTxt = \ 
'<html> \ 
<head> \ 
</head> \ 
<body> \ 
<font size="10"> \ 
<p style="margin-left:8px;">My html text, font = 10pt</p> \ 
</font> \ 
</body> \ 
</html> ' 
     self.infoLbl.setText(self.infoTxt) 
     self.infoLbl.setMaximumHeight(50) 
     self.infoLbl.setMaximumWidth(500) 

     # TEST CASE 2 
     # The label with a normal string 
     self.normalLbl = QLabel() 
     self.normalLbl.setFrameShape(QFrame.StyledPanel) 
     self.normalLbl.setText('My normal text, font = 10pt') 
     font = QFont() 
     font.setFamily("Arial") 
     font.setPointSize(10) 
     self.normalLbl.setFont(font) 
     self.normalLbl.setMaximumHeight(50) 
     self.normalLbl.setMaximumWidth(500) 

     # 4. Add both labels to the central layout. 
     # ------------------------------------------ 
     self.centralLayout.addWidget(self.infoLbl) # <- The label with html snippet 
     self.centralLayout.addWidget(self.normalLbl) # <- The normal label 
     self.centralLayout.addWidget(QLabel())  # <- Just a spacer 


if __name__== '__main__': 
    app = QApplication(sys.argv) 
    QApplication.setStyle(QStyleFactory.create('Fusion')) 
    testWindow = TestWindow() 
    app.exec_() 
    app = None 

:それは2つのラベルでQtのウィンドウをポップアップ表示されます

Font size issue in QLabel

はなぜ両方のラベルのフォントサイズを等しくありませんか?完全のために

、これが私のシステムである:

  • オペレーティングシステム:Windows 10、64ビット
  • Pythonのバージョン:v3の(アナコンダパッケージ)
  • Qtのバージョン:PyQt5

答えて

2

fontタグは、Qt4とQt5の両方で完全にサポートされています。 Qtはa limited subset of HTML4しかサポートしていないので、現在のHTML標準では廃止されているという事実は無関係です。

例の実際の問題は、size属性の誤解によるものです。これは、ポイントサイズを指定していません。むしろ、(a)1〜7の固定値、または(b)basefontサイズに対するプラス/マイナス値のいずれかを指定します。だからこそ、フォントを「小さく」または「より大きく」することができます。正確な結果は、レンダリングエンジンに完全に依存します。

<p style="font-size:10pt">My html text, font = 10pt</p> 

はNB:QtのリッチテキストエンジンでサポートされているすべてのCSSプロパティのリストについてはCSS Properties Tableを参照してください

は使用し、CSS font-sizeプロパティを 正確ポイント・サイズを設定するには。

+0

ありがとうございました:-) –

+0

私は、他の答えに適切な編集を加えました。このように、 'size'属性の誤解が明らかになりました。問題の根本が本当に何であるかを理解するのを手伝ってくれてありがとう。 –

0

私は答えを見つけたと思う。どうやら

self.infoTxt = \ 
    '<html> \ 
    <head> \ 
    </head> \ 
    <body> \ 
    <p style="margin-left:8px; font-size:10pt">My html text, font = 10pt</p> \ 
    </body> \ 
    </html> ' 

正しく動作しません<font size="10"> htmlタグを:

はでHTMLスニペットを交換してください。しかし、それをstyle="font-size:10pt"のようなCSSスタイルの属性として挿入すると機能します。それにもかかわらず、htmlタグは正しく動作するはずです。これはQtバグのようなにおいがしますか?

EDIT: どうやらこれはない Qtのバグです。わかりやすく@ekhumoroの答えを見てください。

1

既に発見したように、代わりにスタイルを使用する必要があるようです。ここではそれについての詳細情報:

それは言う:

この機能は廃止されました。一部のブラウザではまだ動作しているかもしれませんが、いつでも削除することができるため、その使用はお勧めしません。それを避けるようにしてください。

タグは、HTML5でサポートされていません。代わりにCSSを使用してください。

+0

実際、これはQtのバグではなく、 ''タグの省略です。これは時代遅れであるためです。どうもありがとうございます。これですべてがクリアされます! –

+0

@ K.Mulier。いいえ、これは間違っています。 'font'タグはQtによって引き続きサポートされていますが、' size'属性を誤って使用しているだけです。詳細は私の答えを見てください。 – ekhumoro

+0

ありがとうございました:-) –

関連する問題