2014-09-02 69 views
1

嗨,新來這個論壇和一般編程。我有一個項目要求每秒鐘通過串口發送tkinter刻度的值。我一直在試圖找出答案。任何意見,將不勝感激。謝謝:-)Python - 從規模小部件發送不斷的串行數據

編輯 - 當運行波紋管我得到一個tkinter窗口的規模,但在移動的規模數據沒有推過串行端口。

import serial 
from tkinter import * 

mGui = Tk() 
mGui.geometry(500x250) 

ser = serial.Serial(,'/dev/ttyUSB0',9600) 
def scale1(): 
ser.write(s.get) 
s=Scale (mGui, from_=0, to=100, orient=HORIZONTAL, command=scale1) 
s.pack() 
+1

嘿@LeeWright!歡迎SO。請更新您的問題來展示你已經完成了什麼,你得到了哪些結果以及爲什麼它不符合你的期望,這會提高你的問題質量,讓有相同問題的其他用戶找到它並使它更有吸引力,以便人們回答它。 請享用! – g3rv4 2014-09-02 19:53:12

+0

謝謝我已經更新了我的問題 – 2014-09-02 20:04:44

+0

太棒了!現在對於某人來說,理解你的問題會更容易......祝你好運! – g3rv4 2014-09-02 20:23:05

回答

0

你想要什麼或者是一個異步或螺紋生產者/消費者模式,基本上是串口需要定期對新傳入的數據定期傳出的數據調查,並寫入。

一個通用的例子可以從stdlib隊列模塊中挑選出來。你可以很容易地修改它,這樣當Scale()的值發生變化時,它會將新值放入隊列中 - 並有一個專用線程來讀取新數據(如果可用)或將值在隊列中的值寫入串行港口。

你可能會碰到的是,如果你移動Scale控件的速度非常快,那麼隊列將會獲得比可以及時寫入更多的值。

如果是這種情況,您可能只想完全跳過隊列,並通過始終以固定間隔寫入Scale()的當前值來使串行讀取/寫入器工作(0.02秒延遲可能是最小的延遲可以得到的,但如果你真的連接@ 9600波特剛剛修改的寫入期間不寫比你更可以實際投入串行緩衝器的UART。

def worker(): 
    while True: 
     item = q.get() 
     do_work(item) 
     q.task_done() 

q = Queue() 
for i in range(num_worker_threads): 
    t = Thread(target=worker) 
    t.daemon = True 
    t.start() 

for item in source(): 
    q.put(item) 

q.join()  # block until all tasks are done 
+0

感謝您的回答!它會花費我一段時間來理解這一切。正如我所說,我對這一切都很陌生。任何機會你可以解釋這段代碼的每一部分的劑量,因此它更容易理解?再次感謝 – 2014-09-03 07:44:56