PyQt4中的中文顯示問題

2021-06-20 18:05:11 字數 1670 閱讀 1691

程式中的編碼我大概分為兩類問題:

1、程式編碼中使用的字元

一般而言,程式檔案編碼設定為utf-8,設定方法,在程式檔案頭部加上u:

#coding: utf-8

label = u'請輸入乙個檔案目錄...'

或者顯式的使用unicode函式進行轉換。

2、程式讀取到的系統字元(含中文)正確顯示問題

此類問題主要是程式讀取使用者輸入或者是電腦系統檔案等。pyqt4中預設讀取的字串型別為qstring。如果字串中含有中文字元,那麼在簡單用print或者其他字串方法(比如str(...))時就會出現亂碼問題。

解決此類方法可以考慮採用以下設定:

import sys

import locale

from pyqt4.qtgui import *

from pyqt4.qtcore import *

mycode = locale.getpreferredencoding()

code = qtextcodec.codecforname(mycode)

qtextcodec.setcodecforlocale(code)

qtextcodec.setcodecfortr(code)

qtextcodec.setcodecforcstrings(code)

...myframe = yourcustromedwidget()

myframe.show()

上述**中,引入python內建模組locale,是為了使用getpreferredencoding()函式來獲取本地檔案編碼,當然可以直接指定編碼格式:『cp936』、'gb2312'、『gb18030』都可以。』cp936『是微軟在』gb2312『基礎上自定義的編碼格式,基本上可以和』gb2312『等價,除了極少微軟自定義的字元,』gb18030『算是最後發布的中文字元編碼國標,基本上涵蓋了所有的中文字元和繁體等(還有什麼日文平假字之類。。編碼不是很懂)。然後使用qt類qtextcodec提供的方法codecforname()構造乙個code。

1、qtextcodec.setcodecforlocale(code):

主用用來設定程式能夠正確讀取到的本地檔案的編碼方式。當讀取到字串後,pyqt4缺省會返回乙個qstring物件,而qstring預設將字串儲存為unicode。為了能夠正確的在python環境下正確輸出。需要呼叫qstring類的方法tolocal8bit(),轉換過後的型別為qbitearray,此類方法已經在我的程式驗證過了,直接用print方法列印得到的qbitearray字串,就可以正確顯示中文字元了。

另外,關於qbitearray,直接使用python2中的str()就可以得到python2下預設的bytes形式,這篇博文也給出了一定解釋。

2、qtextcodec.setcodecfortr(code): 此方法主要用來當遇到tr(str)函式(其中str為你輸入的字串)時,程式就會使用你設定的code編碼來解析該字串方法。tr()主要用來軟體的國際化。

3、qtextcodec.setcodecforcstrings(code): 此方法主要用來對char和qsting之間進行轉換的時候用到,這個方法我還沒有用到過。

針對我的問題,只需要用1中的方法就可以解決。

問題記錄如上,水平有限,以待後面補充加改.

手打好累。。。0-0...

PyQt4 常用的視窗元件

擴充套件知識 熟悉常用的視窗元件 1按鈕類 qpushbutton 普通按鈕 qtoolbutton 工具按鈕 通常在工具欄使用 qradiobutton 單選框 qcheckbox 核取方塊 qcommanlinkbutton vista風格的命令鏈結按鈕 qdialogbuttonbox 對話方...

Windows下PyQt4的安裝

windows下pyqt4的安裝 更多 5 1.環境 os windows 7 64bits python 2.7.2 pyqt qtqt designer li qt linguist qt語言家 qt assistant pyuic4 換由qt designer生成的.ui檔案到.py pylu...

PyQt4中pyrcc4和pyuic4的使用

寫了個pyqt4的程式,用desiger設計了個介面,使用了qt的rcc系統。於是研究了一下pyrcc4和pyuic4的使用方法,其實都很簡單,pyrcc4 o ui form.py form.ui,pyuic4同樣的用法。由於用到了好幾個ui,一行行的敲著挺麻煩,於是邊看python幫助寫了個輔助...