2016-10-12 12 views
0

私は、Telnetセッションを介して電源に接続するpythonスクリプトを持っています。次のようにスクリプトの流れは次のとおりです。私は何をしたいのですが電流電圧ごとのtミリ秒(ms)を取得することができ、デバイスまで、私のTkinterのGUI上に表示することができるようですPython Telnetで連続データを収集する方法

# Connect to Device 
tn = telnetlib.Telnet(HOST,PORT) 

# Turn On 
tn.write("OUT 1\r") 

# Get Current Voltage 
current_voltage = tn.write("MV?\r") 

# Turn Off 
tn.write("OUT 0\r") 

オフにするように命令される。理想的には、電圧対時間のようなグラフ上に表示したいのですが、今のところ動的なテキスト表示でしか生きられません。 current_voltage変数には、現在の電圧値を表す文字列が格納されます。私はこれを達成する最良の方法は何ですか?ありがとう。

答えて

2

ミリ秒ごとに、おそらくtkinterは処理できます。それは、電圧をフェッチすることがどれほど費用がかかっているかに少し依存します。ミリ秒よりも時間がかかる場合は、スレッドまたはマルチプロセッシングが必要になります。

最も簡単な解決策は、afterを使用してミリ秒ごとにデータの取得をスケジュールすることですが、ここでもそれは維持できるかどうかはわかりません。問題は、イベントループがイベントを処理する時間が必要であり、電圧をフェッチしていない小さなウィンドウを与えると、GUIが遅くなる可能性があるということです。

一般的な手法は、何らかの作業を行う関数を記述し、その後afterを呼び出すことです。例えば

root = tk.Tk() 
... 
def get_voltage(): 
    <your code to get the voltage goes here> 

    # get the voltage again in one millisecond 
    root.after(1, get_voltage) 
... 
get_voltage() 
root.mainloop() 

他の選択肢は、あなたが電圧情報を取得し、キューにそれを置くが、何もしないスレッドを持つスレッドを使用することです。その後、上記と同じ方法を使用して、表示のためにキューから最新の電圧を引き出すことができます。

+0

こんにちはブライアン、私は、Tk()メソッドを使用して "後"にデータをフェッチする方法を書くソリューションを探していました。私はむしろそれをデータを取得するスタンドアロンの方法であると思います。例えば、wループでget電流電圧法を連続的に呼び出す方法があります。 – DeeTee

+0

@DeeTee:スレッドを使用する場合はyesです。 GUIスレッド内からループ内の関数を呼び出す唯一の方法は、 'after'を使うことです。 –

+0

私に例をあげることができると思いますか? – DeeTee

関連する問題