Python中将系统输出显示在PyQt中
2011-03-11 13:42
639 查看
开发一个系统,需要将系统的输出显示在PyQt中,可以直接截获sys.stdout,也可以使用信号和槽来实现。
直接显示:
"""
Example usage:
import sys
sys.stdout = OutLog( edit, sys.stdout)
sys.stderr = OutLog( edit, sys.stderr, QtGui.QColor(255,0,0) )
"""
class OutLog:
def __init__(self, edit, out=None, color=None):
"""(edit, out=None, color=None) -> can write stdout, stderr to a
QTextEdit.
edit = QTextEdit
out = alternate stream ( can be the original sys.stdout )
color = alternate color (i.e. color stderr a different color)
"""
self.edit = edit
self.out = None
self.color = color
def write(self, m):
global aSigalOutLog
if self.color:
tc = self.edit.textColor()
self.edit.setTextColor(self.color)
self.edit.moveCursor(QtGui.QTextCursor.End)
self.edit.insertPlainText(m)
if self.color:
self.edit.setTextColor(tc)
if self.out:
self.out.write(m)
这种方法在多线程处理时可能有点问题,下面可以使用信号和槽来实现:
#encoding=gb2312
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyMailServerMain import Ui_MainWindow
#信用信号和槽来处理日志
class SigalOutLogSender(QObject):
def SendMsg(self, m):
self.emit(SIGNAL('DisplayLog(QString)'),m)
aSigalOutLog=SigalOutLogSender()
class OutLog:
def __init__(self):
pass
def write(self, m):
global aSigalOutLog
aSigalOutLog.SendMsg(u'%s' % m)
class StartQt4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
QtCore.QObject.connect(self.ui.btnSendMail,QtCore.SIGNAL("clicked()"), self.ProcessSend, 1)
#捕捉系统输出
sys.stdout = OutLog()
sys.stderr = OutLog()
#使用信号和槽来处理日志
global aSigalOutLog
QtCore.QObject.connect(aSigalOutLog,QtCore.SIGNAL("DisplayLog(QString)"), self.DisplayLog, 1)
def ProcessSend(self):
#使用信号和槽来处理日志
global aSigalOutLog
print u'测试标准输出'
def DisplayLog(self,log):
self.ui.memLog.moveCursor(QtGui.QTextCursor.End)
self.ui.memLog.insertPlainText(log)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQt4()
myapp.show()
sys.exit(app.exec_())
直接显示:
"""
Example usage:
import sys
sys.stdout = OutLog( edit, sys.stdout)
sys.stderr = OutLog( edit, sys.stderr, QtGui.QColor(255,0,0) )
"""
class OutLog:
def __init__(self, edit, out=None, color=None):
"""(edit, out=None, color=None) -> can write stdout, stderr to a
QTextEdit.
edit = QTextEdit
out = alternate stream ( can be the original sys.stdout )
color = alternate color (i.e. color stderr a different color)
"""
self.edit = edit
self.out = None
self.color = color
def write(self, m):
global aSigalOutLog
if self.color:
tc = self.edit.textColor()
self.edit.setTextColor(self.color)
self.edit.moveCursor(QtGui.QTextCursor.End)
self.edit.insertPlainText(m)
if self.color:
self.edit.setTextColor(tc)
if self.out:
self.out.write(m)
这种方法在多线程处理时可能有点问题,下面可以使用信号和槽来实现:
#encoding=gb2312
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyMailServerMain import Ui_MainWindow
#信用信号和槽来处理日志
class SigalOutLogSender(QObject):
def SendMsg(self, m):
self.emit(SIGNAL('DisplayLog(QString)'),m)
aSigalOutLog=SigalOutLogSender()
class OutLog:
def __init__(self):
pass
def write(self, m):
global aSigalOutLog
aSigalOutLog.SendMsg(u'%s' % m)
class StartQt4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
QtCore.QObject.connect(self.ui.btnSendMail,QtCore.SIGNAL("clicked()"), self.ProcessSend, 1)
#捕捉系统输出
sys.stdout = OutLog()
sys.stderr = OutLog()
#使用信号和槽来处理日志
global aSigalOutLog
QtCore.QObject.connect(aSigalOutLog,QtCore.SIGNAL("DisplayLog(QString)"), self.DisplayLog, 1)
def ProcessSend(self):
#使用信号和槽来处理日志
global aSigalOutLog
print u'测试标准输出'
def DisplayLog(self,log):
self.ui.memLog.moveCursor(QtGui.QTextCursor.End)
self.ui.memLog.insertPlainText(log)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQt4()
myapp.show()
sys.exit(app.exec_())
相关文章推荐
- python中正确显示windows系统上其他进程的输出
- python调用os.system执行系统命令,中文输出显示乱码
- Hadoop学习----直接使用FileSystem以标准输出格式显示Hadoop文件系统中的文件
- PyQt icon创建,显示 PyQt4 -- 系统托盘图标设置
- python dataframe 输出结果整行显示
- python-输出颜色显示
- 开启系统相机拍照并输出显示保存到指定位置
- python系统编程之修改IE标题栏显示日期和天气情况
- Python中将(字典,列表等)变量格式化输出
- python画图包seaborn和matplotlib中文字体显示(针对windows系统,,使用ipython notebook)
- 使用seek()方法,将Hadoop文件系统中的一个文件在标准输出上显示两次
- Python中Dataframe通过print输出多行时显示省略号
- Python基于logger模块的日志输出系统
- Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)
- 允许Python文档中显示中文 & 允许SublimeText2输入中文 & 允许Python输出unicode字符
- Android6.0 显示系统(六) 图像的输出过程
- python + pyqt4 中文显示
- python中将源码加入系统环境中
- Python执行系统命令并获得输出的几种方法
- python执行系统命令并取得输出内容