如何制作python的内置打印功能,在gui上制作标签(我正在制作REPL),而不是打印到控制台?

2024-07-03 02:32:43 发布

您现在位置:Python中文网/ 问答频道 /正文

标题说明了一切,这就是我目前拥有的(赤裸裸的开始)。我将覆盖所有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


1条回答
网友
1楼 · 发布于 2024-07-03 02:32:43

请看以下代码:

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.Labels。这样做容易得多

相关问题 更多 >