有没有办法将所有IDLE输出重定向到tkinter GUI,或者使用IDLE输出执行某些操作?我想在tkinter GUI中显示来自http.server
模块的所有IDLE输出,以监控网络服务器发生的所有事情。这可以通过一些简单的函数/命令来实现,还是会涉及编辑IDLE lib文件?
之前问过similair,我想把整个IDLE / python shell嵌入到我的监控程序中,但是对于最新的python版本来说这似乎是不可能的。
编辑:
from tkinter import *
import sys, time, threading
global TXT
root = Tk()
TXT = Text(root, font="Arial")
TXT.pack(fill=X)
class RedirectText(object):
def __init__(self, TXT):
self.out = TXT
def write(self, string):
TXT.insert(END, string)
sys.stdout = RedirectText(TXT)
for i in range(10):
print("test", i+1)
def thread():
print("Delayed")
threading.Timer(1, thread).start()
threading.Timer(1, thread).start()
root.mainloop()
删除了所有错误的代码,现在有了这个。不会写任何与系统相关的内容,只是print()
函数内部的内容。仍在寻找一种方法insert
将所有系统输出转换为文本小部件。
答案 0 :(得分:1)
有关将stdout重定向到Tkinter文本小部件的示例,请参阅this answer。
答案 1 :(得分:0)
您不想重定向IDLE输出,您想要重定向系统标准输出。这是我之前为WXPython使用的一些东西:
class RedirectText(object):
def __init__(self, TextCtrl):
self.out = TextCtrl
def write(self, string):
wx.CallAfter(self.out.WriteText, string)
然后初始化:
import sys
sys.stdout = RedirectText(log)
其中log是WX TextCtrl小部件。