【问题标题】: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('<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末尾的文件,或者从中读取并将必要的位粘贴到日志文件或其他东西......
我希望这会有所帮助。