我有這個問題。我正在創建一個編輯器,我需要輸出到一個textview的控制檯輸出(sys.stderr和sys.stdout)。問題是,當我啓動控制檯時,它等待它退出,但我希望它捕捉任何內容並將其輸出到textview,所以我認爲你可能需要不同的線程,但是它不會使它無法從其他線程捕捉任何東西?如果編輯器沒有從終端啓動,我希望這樣做。如果你想知道它將被用作模塊。這是目前爲止的代碼:pygtk控制檯輸出用於調試
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))
謝謝。
我意外地省略了一些文字,因爲我將它合併到其他地方。問題是我不知道如何在這種情況下使用線程。我已經看過一些例子,但是我無法用頭圍住它。如果你將這個包含在你的例子中,我將不勝感激:)。 – thabubble
@thabubble我已經更新了答案。 –