【发布时间】:2011-10-11 13:40:28
【问题描述】:
我有这个问题。我正在创建一个编辑器,我需要将控制台输出(sys.stderr 和 sys.stdout)输出到文本视图。问题是当我启动控制台时,它会等待它退出,但我希望它捕获任何东西并将其输出到 textview,所以我认为你可能需要不同的线程,但它不会让它不可能从另一个线程中捕获任何东西?我想要这个,以防编辑器不是从终端启动的。如果您想知道,它将被用作一个模块。这是到目前为止的代码:
import sys
import gtk
import pygtk
pygtk.require('2.0')
class Console:
def __init__(self):
tv = gtk.TextView()
tv.set_editable(False)
tv.set_wrap_mode(gtk.WRAP_WORD)
self.buffer = tv.get_buffer()
table = gtk.Table(3, 6, gtk.FALSE)
table.attach(tv, 0, 6, 0, 1)
#### Main window
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect('destroy_event', lambda w, e: gtk.mainquit())
self.window.connect('delete_event', lambda w, e: gtk.mainquit())
self.window.set_border_width(10)
self.window.add(table)
self.window.set_title('Search')
self.window.set_default_size(300, 300)
self.window.show_all()
def main(self):
gtk.main()
c = Console()
class ConsoleOutput:
def __init__(self, source):
self.source=source
self.buf = []
def write(self, data):
self.buf.append(data)
if data.endswith('\n'):
c.buffer.insert(c.buffer.get_end_iter(), ''.join(self.buf))
self.buf = []
def __del__(self):
if self.buf != []:
c.buffer.insert(c.buffer.get_end_iter(), ''.join(self.buf))
谢谢。
【问题讨论】:
标签: python windows linux gtk pygtk