pyQtのQTextEditにユニコードテキストを表示しようとしています。pyQtとQTextEdit:ユニコード文字が表示されるのはなぜですか?
Mac OSX El CapitanではPython 2.7とPyQt4です。
私はいくつかのQ &を読んでいますが、Python、QString、unicodeについては、次の実行例がありました。
実行すると、2つのユニコード文字列が端末に出力され、メインウィンドウのQTextEditにも表示されます。 最初の文字列は大丈夫です(Q & Aここからstackoverflowでコピーしましたが、実際には英語の意味が分かりません)。 私の端末とQTextEditにすべての文字が正しく表示されています。
しかし、2番目の文字列の絵文字はQTextEditにはありませんが、端末で正しく表示されます。 QTextEditには、 '---'の間に2つの空白があります。空白をQTextEditにコピーして端末に貼り付けると、その絵文字が表示されます。だから、コンテンツはそこにあるようだが、グラフィック表現ではないようだ。
フォントファミリーはMonacoに設定されています。これは開発用に使用するEclipseのテキスト端末のフォントです。 Eclipseはエモーティコンをエディタにも正しく表示します。
だから私は、モナコフォントファミリーが顔文字をサポートすると仮定しました。
どうしたのですか?任意のヘルプ
アーミン
実行例えば
ありがとう:...長さのため申し訳ありませんが、これは既存のコードからこまごまとした中にコピーされたとpyuicは、UIクラスを生成
# -*- coding: utf-8 -*-
'''
'''
# Importing the necessary Qt classes.
import sys
import re
import sip
import time
from PyQt4 import QtCore
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(550, 350)
self.ExitButton = QtGui.QPushButton(Dialog)
self.ExitButton.setGeometry(QtCore.QRect(420, 310, 100, 35))
self.ExitButton.setObjectName(_fromUtf8("ExitButton"))
self.logView = QtGui.QTextEdit(Dialog)
self.logView.setGeometry(QtCore.QRect(20, 30, 500, 280))
self.logView.setReadOnly(False)
self.logView.setObjectName(_fromUtf8("logView"))
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
self.ExitButton.setText(_translate("Dialog", "Exit", None))
class MainWindow(QMainWindow, Ui_Dialog):
# quit
def finish(self):
quit()
def __init__(self):
QMainWindow.__init__(self)
# set up User Interface (widgets, layout...)
self.setupUi(self)
# custom slots connections
QtCore.QObject.connect(self.ExitButton, QtCore.SIGNAL("released()"), self.finish)
self.logView.setFontFamily("Monaco")
print("Zażółć gęślą jaźń")
print("Xc--")
t = QString.fromUtf8("---Zażółć gęślą jaźń---")
self.logView.append(t)
t = QString.fromUtf8("------")
self.logView.append(t)
print("family is " + self.logView.fontFamily())
self.logView.append("family is " + self.logView.fontFamily())
# Main entry to program. Sets up the main app and create a new window.
def main(argv):
# create Qt application
app = QApplication(argv,True)
# create main window
wnd = MainWindow() # classname
wnd.show()
# Connect signal for app finish
app.connect(app, QtCore.SIGNAL("lastWindowClosed()"), app, QtCore.SLOT("quit()"))
# Start the app up
sys.exit(app.exec_())
if __name__ == "__main__":
main(sys.argv)
ありがとうございました。 sys.maxunicodeの出力は実際65535なので、これは私のコードの動作を説明しています。 – arminphys
OK、私はpython3(バージョン3.5.2)をhomebrewでインストールし、sip&pyqtを再インストールし、python3を使用するようEclipseを更新して再試行しました。現在、sys.maxunicodeの出力は1114111ですが、実行例の動作は同じですが、QTextEditの顔文字はありませんが、まだEclipseと端末では、QTextEditから端末に2つの空白をコピーして貼り付けても、ターミナルで。他に何を試すことができますか? – arminphys
@arminphys。 Pythonの幅広いビルドに対してコンパイルされたpyqtをインストールする必要があります。 – ekhumoro