1

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

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

提前致谢!

4

2 回答 2

1

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

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

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

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

于 2012-10-24T20:14:05.273 回答
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

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

这样做之后,在您的 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,或者从中读取并将必要的位粘贴到日志文件或其他东西...

我希望这有帮助。

于 2019-08-01T11:07:21.817 回答