Pyqt print输出到控件中小demo
来源:互联网 发布:vb财务管理系统源码 编辑:程序博客网 时间:2024/06/05 00:29
用pyqt做GUI的时候,涉及到日志功能,希望把print的东西输出到某个控件中,如QTextEdit()中。
but how?
根据stackoverflow的大神回复,我们可以写出如下代码:
# #coding:utf-8 from PyQt4 import QtGuifrom PyQt4 import QtCorefrom PyQt4.QtWebKit import*from PyQt4 import QtCore, QtGuifrom PyQt4 import uicfrom PyQt4.QtCore import *from PyQt4.QtGui import *from PyQt4.QtWebKit import *from PyQt4.QtNetwork import *import sysreload(sys)sys.setdefaultencoding('utf-8')class MyConsole(QWidget): def __init__(self,parent): QWidget.__init__(self) self.parent = parent self.initUI() #初始化UI def initUI(self): self.gridlayout = QtGui.QGridLayout() #设置出20 x 20 的格局 for i in range(20): self.gridlayout.setColumnStretch(i,1) self.gridlayout.setRowStretch(i,1) lb1 = QLabel(u'账户:') lb2 = QLabel(u'密码:') self.userEntry = QLineEdit() self.passEntry = QLineEdit() self.passEntry.setEchoMode(QLineEdit.Password) self.loginBtn = QtGui.QPushButton(u"登录") self.loginBtn.setFixedSize(40,20) self.connect(self.loginBtn, QtCore.SIGNAL('clicked()'), self.onLoginButton) self.gridlayout.addWidget(lb1, 0, 0) self.gridlayout.addWidget(lb2, 1, 0) self.gridlayout.addWidget(self.userEntry, 0, 1,1,3) self.gridlayout.addWidget(self.passEntry, 1, 1,1,3) self.gridlayout.addWidget(self.loginBtn, 0, 4,1,2) self.setLayout(self.gridlayout) #响应登录按钮 def onLoginButton(self): username = self.userEntry.text() password = self.passEntry.text() QtGui.QMessageBox.about(self, username+u'登录成功', u"密码是:"+password) print username+u'登录成功', u"密码是:"+password class EmittingStream(QtCore.QObject): textWritten = QtCore.pyqtSignal(str) def write(self, text): self.textWritten.emit(str(text)) class MainWindow(QtGui.QMainWindow): def __init__(self,parent=None): QtGui.QMainWindow.__init__(self, parent) tabs = QtGui.QTabWidget(self) #tab1 tab1 = QtGui.QWidget() vbox = QtGui.QVBoxLayout() console = MyConsole(self) vbox.addWidget(console) tab1.setLayout(vbox) #tab2 self.tab2 = QTextEdit() tabs.addTab(tab1,u"控制台") tabs.addTab(self.tab2,u"日志输出") tabs.resize(500, 350) self.resize(500, 350) #禁止最大化 self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint) self.show() #重定向输出 sys.stdout = EmittingStream(textWritten=self.normalOutputWritten) sys.stderr = EmittingStream(textWritten=self.normalOutputWritten) def __del__(self): sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ def normalOutputWritten(self, text): cursor = self.tab2.textCursor() cursor.movePosition(QtGui.QTextCursor.End) cursor.insertText(text) self.tab2.setTextCursor(cursor) self.tab2.ensureCursorVisible() def main(): app = QtGui.QApplication(sys.argv) win = MainWindow() sys.exit(app.exec_()) if __name__ == '__main__': main()
运行结果,发现的确是把print输出到“日志输出”了,可是为何是乱码呢?
在QString 中文乱码中找到解决方案:
在print前加一句:
QTextCodec.setCodecForCStrings(QTextCodec.codecForName("utf-8"))
最终代码:
# #coding:utf-8 from PyQt4 import QtGuifrom PyQt4 import QtCorefrom PyQt4.QtWebKit import*from PyQt4 import QtCore, QtGuifrom PyQt4 import uicfrom PyQt4.QtCore import *from PyQt4.QtGui import *from PyQt4.QtWebKit import *from PyQt4.QtNetwork import *import sysreload(sys)sys.setdefaultencoding('utf-8')class MyConsole(QWidget): def __init__(self,parent): QWidget.__init__(self) self.parent = parent self.initUI() #初始化UI def initUI(self): self.gridlayout = QtGui.QGridLayout() #设置出20 x 20 的格局 for i in range(20): self.gridlayout.setColumnStretch(i,1) self.gridlayout.setRowStretch(i,1) lb1 = QLabel(u'账户:') lb2 = QLabel(u'密码:') self.userEntry = QLineEdit() self.passEntry = QLineEdit() self.passEntry.setEchoMode(QLineEdit.Password) self.loginBtn = QtGui.QPushButton(u"登录") self.loginBtn.setFixedSize(40,20) self.connect(self.loginBtn, QtCore.SIGNAL('clicked()'), self.onLoginButton) self.gridlayout.addWidget(lb1, 0, 0) self.gridlayout.addWidget(lb2, 1, 0) self.gridlayout.addWidget(self.userEntry, 0, 1,1,3) self.gridlayout.addWidget(self.passEntry, 1, 1,1,3) self.gridlayout.addWidget(self.loginBtn, 0, 4,1,2) self.setLayout(self.gridlayout) #响应登录按钮 def onLoginButton(self): username = self.userEntry.text() password = self.passEntry.text() QtGui.QMessageBox.about(self, username+u'登录成功', u"密码是:"+password) QTextCodec.setCodecForCStrings(QTextCodec.codecForName("utf-8")) print username+u'登录成功!\n' + u"密码是:"+password class EmittingStream(QtCore.QObject): textWritten = QtCore.pyqtSignal(str) def write(self, text): self.textWritten.emit(str(text)) class MainWindow(QtGui.QMainWindow): def __init__(self,parent=None): QtGui.QMainWindow.__init__(self, parent) tabs = QtGui.QTabWidget(self) #tab1 tab1 = QtGui.QWidget() vbox = QtGui.QVBoxLayout() console = MyConsole(self) vbox.addWidget(console) tab1.setLayout(vbox) #tab2 self.tab2 = QTextEdit() tabs.addTab(tab1,u"控制台") tabs.addTab(self.tab2,u"日志输出") tabs.resize(500, 350) self.resize(500, 350) #禁止最大化 self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint) self.show() #重定向输出 sys.stdout = EmittingStream(textWritten=self.normalOutputWritten) sys.stderr = EmittingStream(textWritten=self.normalOutputWritten) def __del__(self): sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ def normalOutputWritten(self, text): cursor = self.tab2.textCursor() cursor.movePosition(QtGui.QTextCursor.End) cursor.insertText(text) self.tab2.setTextCursor(cursor) self.tab2.ensureCursorVisible() def main(): app = QtGui.QApplication(sys.argv) win = MainWindow() sys.exit(app.exec_()) if __name__ == '__main__': main()
1 0
- Pyqt print输出到控件中小demo
- Python print 输出到文件
- python demo之print格式化输出
- pyqt demo
- print支持输出重定向到文件
- Python print 输出到文件(open)
- python:print格式化输出到文件
- print输出
- PyQT first demo
- print 输出到指定文件中,文件名加上当天日期
- pyqt界面控件
- PyQt常用控件积累
- PyQt常用控件
- PyQt版本的360 Demo
- Pyqt 浏览器截图小demo
- Class Demo [输出文字到桌面]
- 解决PyQt中从文件读取内容输出到界面乱码的问题
- print没有输出结果
- RadioButton和CheckBox
- AS使用备忘录
- java Executor 提供的五种线程池
- Android的Selector与Shape
- C++的排序问题
- Pyqt print输出到控件中小demo
- 基于MATLAB的音频信号处理技术实现
- qt 最小化托盘 菜单互斥
- leetcode 344: Reverse String (c#版)
- c++继承
- ubuntu10.10桌面版安装ssh服务器
- c++中的 trivial destructor
- 推荐系统的重点、难点问题
- 【Leetcode】Duplicate Emails