PyQt把控制台输出打印到textEdit(控件)上碰到的问题

lukeqi 2014-02-15 11:57:00
这是我从Stack Overflow上找的代码,就是PyQt把原本terminal输出的语句转打印到控件上。

不过中文是乱码,亲们有没有人懂怎么把如下的语句正常打印出中文啊?谢谢!


from PyQt4 import QtCore

class EmittingStream(QtCore.QObject):

textWritten = QtCore.pyqtSignal(str)

def write(self, text):
self.textWritten.emit(str(text))


# Within your main window class...

def __init__(self, parent=None, **kwargs):
# ...

# Install the custom output stream
sys.stdout = EmittingStream(textWritten=self.normalOutputWritten)

def __del__(self):
# Restore sys.stdout
sys.stdout = sys.__stdout__

def normalOutputWritten(self, text):
"""Append text to the QTextEdit."""
# Maybe QTextEdit.append() works as well, but this is how I do it:
cursor = self.textEdit.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(text)
self.textEdit.setTextCursor(cursor)
self.textEdit.ensureCursorVisible()


原文在:http://stackoverflow.com/questions/8356336/how-to-capture-output-of-pythons-interpreter-and-show-in-a-text-widget/21746133#21746133
...全文
5180 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ouyangbro 2016-05-15
  • 打赏
  • 举报
回复
在print之前加一句: QTextCodec.setCodecForCStrings(QTextCodec.codecForName("utf-8"))
midforest 2016-01-19
  • 打赏
  • 举报
回复
‘’‘ python = 3.4 pyqt = 4 呵呵,能跑。晚了俩年才回复呵呵。 ’‘’ from PyQt4 import QtCore,QtGui import sys class EmittingStream(QtCore.QObject): textWritten = QtCore.pyqtSignal(str) def write(self, text): self.textWritten.emit(str(text)) class MainFrame(QtGui.QDialog): def __init__(self): super(MainFrame,self).__init__() sys.stdout = EmittingStream(textWritten=self.normalOutputWritten) sys.stder = EmittingStream(textWritten=self.normalOutputWritten) self.textEdit = QtGui.QTextEdit(self) self.myButton = QtGui.QPushButton(self) self.myButton.setObjectName("myButton") self.myButton.setText("Test") self.myButton.clicked.connect(self.msg) layout = QtGui.QVBoxLayout() self.setLayout(layout) layout.addWidget(self.myButton) layout.addWidget(self.textEdit) def __del__(self): # Restore sys.stdout sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ def msg(self): print('test button clicked.') def normalOutputWritten(self, text): """Append text to the QTextEdit.""" # Maybe QTextEdit.append() works as well, but this is how I do it: cursor = self.textEdit.textCursor() cursor.movePosition(QtGui.QTextCursor.End) cursor.insertText(text) self.textEdit.setTextCursor(cursor) self.textEdit.ensureCursorVisible() if __name__=="__main__": qApp=QtGui.QApplication(sys.argv) main=MainFrame() main.show() sys.exit(qApp.exec_())
panghuhu250 2014-02-16
  • 打赏
  • 举报
回复
估计是编码问题。找到问题的办法是顺着你的数据经过的地方,检查在那儿数据出了问题。就你的例子来说: print --> EmittingStream.write --> normalOutputWritten(self, text) --> cursor.insertText(text) 在每一步,检查type(text)(通过插入print或单步调试).最后一步时,text应该是unicode string。

37,744

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧