问题描述
标题说明了一切,这就是我目前所拥有的(赤裸裸的开始)。我将覆盖所有 sys.std__
函数,这样我就不必手动覆盖打印、输入等函数......我不确定如何实际放置标签,因为我不知道'没有 Gui 类所需的属性。
class ModifiedPrint:
def __init__(self):
self.old = sys.stdout
def write(self,text):
sys.stdout = self.old
print(text) # just a start
sys.stdout = self
def flush(self):
self.old.flush()
sys.stdout = ModifiedPrint()
整个代码:(包括提到的 Gui 类)https://pastebin.com/9J9BiFGr
解决方法
看看这段代码:
import tkinter as tk
import sys
class GUIPrint:
def __init__(self,text_widget:tk.Text):
self.old_stdout = sys.stdout
self.text = text_widget
def write(self,data:str):
# Insert the text in the text widget
self.text.insert("end",data)
def __enter__(self):
# Enter the `with` statement
sys.stdout = self
return self
def __exit__(self,*args):
# Exit the `with` statement
sys.stdout = self.old_stdout
def function():
print("Hello world")
root = tk.Tk()
text_widget = tk.Text(root)
text_widget.pack()
gui_printer = GUIPrint(text_widget)
print("Normal stdout")
with gui_printer:
print("Inside the GUI")
function()
print("Normal stdout")
root.mainloop()
with
语句中的所有内容都打印在文本小部件中。总是保持 sys.stdout
不是一个好主意,所以我在 with
语句退出时释放它。
请注意,我使用了 tk.Text
而不是 tk.Label
。这样做会容易得多。