【发布时间】:2014-02-27 05:51:15
【问题描述】:
我使用 tkinter 编写了一个 gui,我需要将 2 个刻度的值实时发送到 arduino。我已经验证了 arduino 正在使用另一个将值发送到 arduino 的草图工作,并且这些草图已被接收,我已将以下代码添加到我的 python 代码中
while True:
#command = raw_input("Enter level ")
#if command == '1' :
ser.write("c"+str (c1v.get()))
ser.write(":d"+str (c2v.get()))
我已将其移至 tkinter 主循环的内部和外部,并从 gui 不加载到仅在 gui 关闭后发送的数据中获得不同的结果。有人可以告诉我如何让 gui 运行,当我移动刻度时,值会通过串行方式实时发送到 arduino。
代码如下:
from Tkinter import *
import serial
ser = serial.Serial('/dev/ttyAMA0', 9600)
master= Tk()
master.geometry('500x500+0+0')
def print_value(val):
print ("c1="+str (c1v.get()))
print ("c2="+str(c2v.get()))
c1v=DoubleVar()
c2v=DoubleVar()
c1 = Scale(master, from_=255, to=0, length =400,width =100, troughcolor = 'blue',command=print_value, variable =c1v)
c1.grid(row=1,column=1)
c2 = Scale(master, from_=255, to=0, length =400,width =100, troughcolor = 'blue',command=print_value, variable =c2v)
c2.grid(row=1,column=2)
def load_p1():
pass
lp1 = open("/home/pi/Desktop/IEP/test/preset_test.txt")
val1, val2 = (x.split("=")[1] for x in lp1)
c1.set(val1)
c2.set(val2)
lp1.close()
#
def record():
save_path = '/home/pi/Desktop/IEP/test'
name_of_file = ("preset_test")
completeName = os.path.join(save_path, name_of_file+".txt")
file1 = open(completeName , "w")
toFile = ("c1="+str (c1.get())+ "\n""c2="+str(c2.get()))
file1.write(toFile)
file1.close()
rec=Button(master, text="Record",width=20, height=10, bg='Red', command=record)
rec.grid(row=2, column=1)
load=Button(master, text="Load",width=20, height=10, bg='gold',command=load_p1)
load.grid(row=2, column=2)
master.mainloop()
while True:
#command = raw_input("Enter level ")
#if command == '1' :
ser.write("c"+str (c1v.get()))
ser.write(":d"+str (c2v.get()))
【问题讨论】:
-
看看stackoverflow.com/questions/21440731/… 和两个答案。如果您没有看到连接,请随时询问。
-
我没有关注,你是说因为我有一个while循环吗?我已经阅读了两个答案,但我不明白。你能解释一下我的情况有什么问题吗?
-
不清楚你是想在程序的生命周期内发送一个连续的流,还是只在用户移动刻度时发送新值。
标签: python loops tkinter serial-port