我一直在研究这个代码,然后把输出输出到终端。如何在tkinter GUI窗口中输出要打印的输出?这是代码:
import sys
import os
from tkinter import *
def ping():
myinptext = entry.get()
os.system("ping "+entry.get()+" -c 2" )
myGui = Tk()
entry = StringVar()
myGui.geometry('300x300')
myGui.title("Get output inside GUI")
mylabel = Label(myGui,text="Enter target IP or host as required.").pack()
mybutton = Button(myGui,text ="Ping Test",command = ping).pack()
myEntry = Entry(myGui,textvariable=entry).pack()
myGui.mainloop()
答案 0 :(得分:1)
使用subprocess代替os.system。有许多函数可以使用外部命令。
我使用subprocess.check_output()
来获取执行命令的结果。命令必须是列表["ping", entry.get(), "-c", "2"]
。如果您使用shell=True
,则命令可以是单个字符串。
import tkinter as tk
import subprocess
def ping():
cmd = ["ping", entry.get(), "-c", "2"]
output = subprocess.check_output(cmd)
#output = subprocess.check_output("ping {} -c 2".format(entry.get()), shell=True)
print('>', output)
# put result in label
result['text'] = output.decode('utf-8')
my_gui = tk.Tk()
entry = tk.StringVar()
my_gui.geometry('300x300')
my_gui.title("Get output inside GUI")
tk.Label(my_gui, text="Enter target IP or host as required.").pack()
tk.Entry(my_gui, textvariable=entry).pack()
tk.Button(my_gui,text="Ping Test", command=ping).pack()
# label for ping result
result = tk.Label(my_gui)
result.pack()
my_gui.mainloop()
BTW:因为ping
需要一些时间,所以tkinter
会冻结这段时间。如果您需要非冻结版本,则需要subprocess
或threading
模块中的其他功能。