Tkinter:重定向stdout到只读文本

1 投票
1 回答
1089 浏览
提问于 2025-04-18 01:46

我正在用Python的Tkinter库创建一个图形用户界面(GUI)。

我已经可以把输出信息(stdout)重定向到一个文本框里,但不太清楚怎么让这个文本框变成只读的,也就是用户不能在里面编辑内容。

到目前为止,重定向输出信息的代码如下:

class IORedirector(object):
   '''A general class for redirecting I/O to this Text widget.'''
   def __init__(self,text_area):
      self.text_area = text_area
class StdoutRedirector(IORedirector):
   '''A class for redirecting stdout to this Text widget.'''
   def write(self,message):
      self.text_area.insert("insert", message)

self.text_box = Text(self, wrap = 'word')
self.text_box.grid(column = 0, row = 1, columnspan = 2, sticky = 'NSWE', padx = 5, pady = 5)
sys.stdout = StdoutRedirector(self.text_box)

1 个回答

1

其实这件事非常简单。

只需要在StdoutRedirector类里面加上两行代码:

class StdoutRedirector(IORedirector):
   '''A class for redirecting stdout to this Text widget.'''
   def write(self,message):
      self.text_area.config(state = "normal")
      self.text_area.insert("insert", message)
      self.text_area.config(state = "disabled")

撰写回答