Tkinter显示终端输出

时间:2012-10-24 19:56:17

标签: user-interface terminal tkinter output

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

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

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

p = sub.Popen('./script',stdout=sub.PIPE,stderr=sub.PIPE)
output, errors = p.communicate()
self.text.insert("end", output)
如果您使用线程或多处理,它会变得有点复杂,但概念是相同的:以允许捕获输出的方式运行程序,然后在文本小部件完成运行时将输出插入

答案 1 :(得分:0)

嗯,我绝对不是专家,但让我试一下。 您可以做的就是将所有终端输出重定向到一个文件,例如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

或者如果您的程序不是os.system('<terminal command i.e. "echo foo">')以外的python,请使用第一种方法将输出定向到文件。

这样做之后,在您的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末尾写命令删除文件,或从中读取并将必要的位粘贴到日志文件或其他内容中。

我希望这会有所帮助。

相关问题