【问题标题】:stdout to tkinter GUI标准输出到 tkinter GUI
【发布时间】:2011-03-20 23:40:11
【问题描述】:

如何将标准输出数据重定向到 tkinter 文本小部件?

【问题讨论】:

  • 第 1 步。去接受您之前问题的一些答案...

标签: python tkinter


【解决方案1】:

这是一个老问题,但我找到了一个我想与社区分享的解决方案。我的示例将工作目录列表通过管道传输到 Tk 窗口。我在 Windows 8 上使用 Python 3.6。我使用 Pydev 通过 Jupyter Notebook 和 Eclipse 运行代码。

import os
from tkinter import *
from subprocess import Popen, PIPE
root = Tk()
text = Text(root)
text.pack()

def ls_proc():
    return Popen(['ls'], stdout=PIPE)

with ls_proc() as p:
    if p.stdout:
        for line in p.stdout:
            text.insert(END, line)
    if p.stderr:
        for line in p.stderr:
            text.insert(END, line)

root.mainloop()

【讨论】:

    【解决方案2】:
    log_box_1 = tk.Text(root, borderwidth=3, relief="sunken")
    
    with subprocess.Popen("ls -la", shell=True, stdout=subprocess.PIPE, bufsize=1, universal_newlines=True) as p:
                for line in p.stdout:
                    log_box_1.insert(tk.END, line)
    

    来自here

    【讨论】:

      【解决方案3】:

      您需要创建一个类似文件的类,其 write 方法改为写入 Tkinter 小部件,然后执行 sys.stdout = <your new class>。见this question

      示例(从链接复制):

      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,str):
              self.text_area.write(str,False)
      

      然后,在您的 Tkinter 小部件中:

      # To start redirecting stdout:
      import sys
      sys.stdout = StdoutRedirector( self )
      # (where self refers to the widget)
      
      # To stop redirecting stdout:
      sys.stdout = sys.__stdout__
      

      【讨论】:

      • 嗨!你能给我举个例子吗?我对python很陌生,我正在努力让它发挥作用。非常感谢:)
      • 链接的问题有你需要的所有代码,我想。您需要像那里一样制作自己的 StdoutRedirector 类版本,然后设置 sys.stdout = StdoutRedirector。我会将代码复制到我的答案中。
      猜你喜欢
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      相关资源
      最近更新 更多