如何在进程中使用stdout更新Python Tkinter Text Widget?

时间:2016-03-01 19:59:46

标签: python tkinter stdout updates

我有一个输出stdout / stderr的Text小部件。问题是当我运行某一行代码(Paramiko - 一个SFTP文件传输)时,如果stdout在控制台中它更新就好了。如果将stdout重定向到Text小部件,则在它已经结束之前不会打印任何内容。我正在传输2 GB以上的文件,而不是让它挂起几分钟,我有一个%的剩余文本输出。

这个solution建议使用线程,但我真的想避免这种情况,因为我的程序中没有其他部分使用线程,我想避免调试。

编辑:添加示例。

class IORedirector(object):
    # A general class for redirecting I/O to this Text widget.
    def __init__(self, text_area):
        self.text_area = text_area

class StdoutRedirector(IORedirector):
    # A class for redirecting stdout to this Text widget.
    def write(self, str):
        self.text_area.insert(END, str)
        self.text_area.see(END)

然后在这个打印过程中,我使用如下的回调:

self.sftp.put(localpath, filepath, callback=self.printTotals)

def printTotals(self, transferred, toBeTransferred):
    print "Transferred: {0}\tOut of: {1}".format(transferred,
        toBeTransferred)

0 个答案:

没有答案