如何用LineEdit.setText()替换所有print()调用,这样用户只需要查看应用程序GUI而不是IDE的控制台?

时间:2018-03-29 10:10:30

标签: python pyqt pyqt5

我编写了一个执行测量的程序,目前我通过Spyder IDE启动它。该程序是用Python 3.6.3编写的。 GUI是使用PyQt5制作的,它应该是用户的主要关注点,但我在Spyder控制台中也有{{1}}多个信息。

准备切换到.exe而不是.py,因为不再有控制台了,我想在我的界面添加一个LineEdit,在那里会发生所有的打印。理想情况下,它会显示我的{{1}}和执行期间生成的各种错误消息。 如何将这些打印重定向到LineEdit?

我在研究过程中发现的大部分信息都是关于使LineEdit成为某种类似的Windows cmd,但与我试图做的相比,这些例子过于苛刻。提前致谢。

1 个答案:

答案 0 :(得分:0)

快速而简单的方法是重新定义内置打印功能。

from PyQt5 import QtWidgets

IS_EXE = True  # There is probably a way to detect this at runtime

class Window(QtWidgets.QPlainTextEdit):

    def __init__(self):
        super(Window, self).__init__()
        self.setReadOnly(True)

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    win = Window()
    win.show()

    # Replace the builtin print function
    if IS_EXE:
        print = win.appendPlainText

    # Print some stuff
    print('foo')
    print('bar')

    app.exec_()