2012-02-03 68 views
0

我在QLabel中顯示來自xml文件的unicode字符串。我需要在QLabel中顯示H O,但以數字「2」作爲下標(Unicode字符U + 2082)。 QLabel可以接受一個html字符串,但我不能把這個html放到xml中。無法在Windows上顯示下標2的Unicode字符

它在Linux中正確顯示,但在Windows中它顯示了一些垃圾而不是下標2.我嘗試了很多不同的方法(包括更改字體系列),但它們都不適用於Windows。爲什麼?

+0

是您使用的代碼產生這樣的結果?您確定在將文字顯示在標籤中之前是否正確解碼了文字? – ekhumoro 2012-02-03 01:37:59

+0

只需使用self.lb_input_unit.setText(input_unit),其中input_unit是一個unicode字符串,不需要任何解碼即可直接從xml中獲取。 xml在unicode中包含所有字符串,並且它們都在瀏覽器中正確顯示。 Windows上有一些Python。正如我所說,下標2在Linux上顯示得很好。 – linuxoid 2012-02-03 01:47:54

回答

3

這可能是一個字體問題,而不是Python。並非Windows中的所有字體都有U + 2082。你需要選擇一個包含這個字符的正確字體。

例如「Arial Unicode MS」有這個。考慮下面的例子:

import sys 
from PyQt4 import QtGui 

app = QtGui.QApplication(sys.argv) 
widget = QtGui.QWidget() 

unicode_font = QtGui.QLabel(u"Unicode Font: H\u2082O") 
unicode_font.setStyleSheet("font-family: 'Arial Unicode MS', Arial, sans-serif; font-size: 15px;") 

normal_font = QtGui.QLabel(u"Normal Font: H\u2082O") 
normal_font.setStyleSheet("font-family: Arial, sans-serif; font-size: 15px;") 


layout = QtGui.QVBoxLayout() 
layout.addWidget(unicode_font) 
layout.addWidget(normal_font) 
widget.setLayout(layout) 
widget.show() 
sys.exit(app.exec_()) 

在Win 7 32位它給:

enter image description here

+0

不,它不起作用。我有self.lb_input_unit = QLabel(u「H \ u2082O」)self.lb_input_unit.setStyleSheet(「font-family :: Arial Unicode MS;」)但它仍然不顯示2 – linuxoid 2012-02-03 02:20:25

+0

@ user665327:如果代碼只是粘貼在你的腳本中是完全一樣的,然後有一個錯字。注意'::'。除此之外,檢查你是否真的有這種字體。您也可以使用'charmap.exe'來查找合適的字體。 – Avaris 2012-02-03 02:25:48

+0

Doh !!!雙冒號,愚蠢的我!它現在有效。非常感謝! – linuxoid 2012-02-03 02:35:19