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



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

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

我在研究过程中发现的大部分信息都是关于制作LineEdit某种Windows cmd等效物,但与我试图做的事情相比,示例是矫枉过正的。 提前谢谢。

一个快速而肮脏的方法是重新定义内置的打印函数。

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_()

最新更新