将标准输出重定向到GUI以打印消息而非终端

1 投票
2 回答
5139 浏览
提问于 2025-04-16 03:03
#!/usr/bin/python

import wx
import os
import sys

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(480, 400))
        self.panel = MyPanel(self, -1)
        self.Centre()
        self.Show(True)
        setstd()
        print 'test'
        """
        syncall()
        """

class MyPanel(wx.Panel):
    def __init__(self, parent, id):
        wx.Panel.__init__(self, parent, id)
        self.text = wx.StaticText(self, -1, '', (40, 60))

class MyText():
    def write(string):
        label = frame.panel.text.GetLabel()
        frame.panel.text.SetLabel(string)

def setstd():
    sys.stdout = MyText()
    sys.stderr = MyText()

app = wx.App()
frame = MyFrame(None, -1, 'DropBox log')
app.MainLoop()

没有使用打印'test'的时候,程序还能运行,但一旦加上打印'test',程序就不运行了,也不会把输出重定向。

怎么才能把标准输出重定向到图形界面上,而不是在终端里显示信息呢?

2 个回答

2

当你在使用 wxPython 的时候,如果你用 print 语句,输出的内容会根据你是怎么调用 wx.App() 来决定。

如果你用 wx.App(redirect=False) 或者简单地用 wx.App(0),那么打印的内容会显示在一个控制台窗口里;如果不是这样调用,它们就会显示在一个小的文本框窗口里。

撰写回答