2016-12-15 12 views
0

私はこのコードを使って作業しています。私は端末に出力します。 tkinterのGUIウィンドウのinstedで出力するにはどうすればよいですか?tkinterの出力をCLIではなく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

[サブプロセス](https://docs.python.org/3/library/subprocess.html)と 'stdout'の入手方法 – furas

+0

'ウィジェット(...)。pack() 'は' None 'mylabel'、' mybutton'、 'myEntry'に' None'を割り当てます。変数 'mylabel'が本当に必要な場合は、' mylabel = Label(..) 'と' mylabel.pack() 'の2つのステップで行う必要があります。しかし、あなたの例では、この変数を必要としないので、変数なしで行うことができます - 'Label(...)。pack()' – furas

答えて

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() 

はところで:pingはある程度の時間がかかるのでそうtkinterこの時のために凍結します。凍結しないバージョンが必要な場合は、subprocessまたはthreadingモジュールに他の機能が必要です。

+0

@furasに感謝しました。とても有難い! –

関連する問題