相关疑难解决方法(0)

如何将实时STDOUT从导入模块重定向到python中的Tkinter Text Widget?

我试图在Windows 7上使用Python 2.7.2将stdout实时重定向到Tkinter Text小部件.在我的下面的代码中,我打算每2秒在Text小部件中出现一个print语句.相反,会发生的是所有3条线

Received sleep-command
Going to sleep for 2 s
Just woke up
Run Code Online (Sandbox Code Playgroud)

一旦评估了sleep()和mod1.main(),就会同时出现.

令人惊讶的是(至少对我来说)当我不重定向stdout时问题就消失了.也就是说,如果我注释掉这条线

sys.stdout = StdoutRedirector(outputPanel)
Run Code Online (Sandbox Code Playgroud)

IDLE实时显示打印语句.有人可以向我解释这个并建议一种解决方法吗?提前致谢!

这是我的示例代码:

mod1.py

import time
import sys

def main():
    print('Going to sleep for 2 s')
    time.sleep(2)
    print('Just woke up')
Run Code Online (Sandbox Code Playgroud)

text_GUI.py

from Tkinter import *
import sys
import time
import mod1

old_stdout = sys.stdout

class StdoutRedirector(object):

    def __init__(self, text_area):
        self.text_area = text_area

    def write(self, str):
        self.text_area.insert(END, str)
        self.text_area.see(END)

def sleep():
    print('Received sleep-command')
    time.sleep(2)
    mod1.main()

root = Tk()

# Textbox
outputPanel = …
Run Code Online (Sandbox Code Playgroud)

python printing redirect stdout tkinter

4
推荐指数
1
解决办法
2392
查看次数

标签 统计

printing ×1

python ×1

redirect ×1

stdout ×1

tkinter ×1