如何在TKinter中显示控制台输出



我希望控制台中的显示显示在GUI(Tkinter(中。它应该在输出到Python控制台时准确显示,而不是在项目完成后。你能用Tkinter做到这一点吗?或者还有其他选择吗?这些是我当前的输出。这些应该在gui上实时显示。

Start program
iterations: [159]
Iteration 1 = complete
Iteration 2 = complete
.....
Iteration 159 = complete
lr 1.0
rc 1.0
rf 0.9966666666666667
gb 1.0
Training time: 8.76517425537s
Training finished
Process finished with exit code 0

您可以执行以下操作:

import sys
from tkinter import Tk, Button, Frame
from tkinter.scrolledtext import ScrolledText

class PrintLogger(object):  # create file like object
def __init__(self, textbox):  # pass reference to text widget
self.textbox = textbox  # keep ref
def write(self, text):
self.textbox.configure(state="normal")  # make field editable
self.textbox.insert("end", text)  # write text to textbox
self.textbox.see("end")  # scroll to end
self.textbox.configure(state="disabled")  # make field readonly
def flush(self):  # needed for file like object
pass

class MainGUI(Tk):
def __init__(self):
Tk.__init__(self)
self.root = Frame(self)
self.root.pack()
self.redirect_button = Button(self.root, text="Redirect console to widget", command=self.redirect_logging)
self.redirect_button.pack()
self.redirect_button = Button(self.root, text="Redirect console reset", command=self.reset_logging)
self.redirect_button.pack()
self.test_button = Button(self.root, text="Test Print", command=self.test_print)
self.test_button.pack()
self.log_widget = ScrolledText(self.root, height=4, width=120, font=("consolas", "8", "normal"))
self.log_widget.pack()
def reset_logging(self):
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
def test_print(self):
print("Am i working?")
def redirect_logging(self):
logger = PrintLogger(self.log_widget)
sys.stdout = logger
sys.stderr = logger

if __name__ == "__main__":
app = MainGUI()
app.mainloop()

相关内容

  • 没有找到相关文章

最新更新