【问题标题】:Tkinter Displaying Terminal OutputTkinter 显示终端输出
【发布时间】:2023-03-03 07:19:18
【问题描述】:

我正在使用 Tkinter(Tk 版本 8.4)创建一个允许用户构建文本“输入”文件的 GUI。该文本文件可由另一个程序读取,该程序进行计算然后输出一个输出文件。我创建了一个菜单选项(使用 OptionMenu 小部件),通过单击“运行”选项从我的 GUI 运行计算程序。但是,为确保计算正确且程序正确运行,您需要密切关注终端。由于这个 GUI 的目的是使文本文件的构建和运行计算更容易,因此在我的 Tkinter GUI 中的文本框或框架中显示终端的输出会很有用。

我已经用谷歌搜索和搜索,但我似乎无法找到一个好的、通用的答案来解决这个问题。我想做的就是在我的 GUI 中显示终端。我该怎么做(我假设它只有几行代码)?

提前致谢!

【问题讨论】:

    标签: user-interface terminal tkinter output


    【解决方案1】:

    您无法在程序中准确显示终端,但我认为这不是您真正想要的。听起来您只想在 GUI 中显示命令的输出。

    你是如何进行计算的?你在用popen吗?如果是这样,您可以获取程序的输出并将其插入到文本小部件中,如下所示:

    p = sub.Popen('./script',stdout=sub.PIPE,stderr=sub.PIPE)
    output, errors = p.communicate()
    self.text.insert("end", output)
    

    如果您使用线程或多处理,它会变得有点复杂,但概念是相同的:以一种允许您捕获输出的方式运行您的程序,然后在运行完成后将输出插入到文本小部件中.

    【讨论】:

      【解决方案2】:

      嗯,我绝对不是专家,但让我试一试。 您可以做的是将所有终端输出重定向到一个文件,例如calculation.py <userinput> >> text.txt 或在您的计算代码中包含该文件,即:

      while calculation: # <- your function 
          with open('text.txt', 'w') as f: # <- open a text file for ouput
              f.write(<calculation output>) # <- keep writing the output
      

      或者如果你的程序不是python而不是os.system('&lt;terminal command i.e. "echo foo"&gt;')并使用第一种方法将输出定向到文件。

      这样做之后,在您的 tkinter 代码中:

      def cmdOutput():
          output = os.system('cat text.txt') # <- replace "cat" with "type" if windows.
          return output.split("\n")[-1] # <- return the last item in the list.
      
      
      while cmdOutput() == "<calculating...>": # <- or something like that.
          tkinterUpdateMethodDeclaredSomewhere(cmdOutput())
      else:
          tkinterUpdateMethodFinalAnswer(cmdOutput())
      

      虽然我确信有更好的方法来做到这一点,但这是一种方法...... 你也可以写一个命令来删除cmdOutput末尾的文件,或者从中读取并将必要的位粘贴到日志文件或其他东西......

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-21
        • 2012-11-15
        • 2012-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多