我编写了一个Arduino代码,它对按钮和物理交互做出反应,然后将结果发送到运行我的python程序(2.7)的计算机上。 python代码有两个函数:
"a1"
和"b1"
的数据
然后显示相应的图像。当Arduino启动时,它将发送"a1"
作为填充窗口的第一个值。之后,它应该根据它发送的数据进行切换。
这是我目前的代码:
from Tkinter import *
from random import *
import serial
import time
root = Tk()
prompt = StringVar()
root.title("vision")
label = Label(root, fg="dark green")
label.pack()
frame = Frame(root,background='red')
frame.pack()
canvas = Canvas(height=200,width=200)
canvas.pack()
timestamp = int(time.time())
filename=str(timestamp)+".txt"
f = open(str(filename),"w")
f.write("\n")
f.write(str(filename))
f.write("\n")
arduino = serial.Serial('COM5', 115200, timeout=.1)
while True:
data = arduino.readline()[:-2] #the last bit gets rid of the new-line chars
print data
f.write(str(data))
f.write("\n")
#Invoking through button
TextWindow = Label(frame,anchor = NW, justify = LEFT, bg= 'white', fg = 'blue', textvariable = prompt, width = 75, height=20)
TextWindow.pack(side = TOP)
if data == "a1":
canvas.delete("all")
image1 = PhotoImage(file = "c2.gif")
canvas.create_image(0,0,anchor='nw',image=image1)
canvas.image = image1
if data == "b1":
canvas.delete("all")
image1 = PhotoImage(file = "c2.gif")
canvas.create_image(0,0,anchor='nw',image=image1)
canvas.image = image1
root.mainloop()
它生成窗口但它是空的。 我似乎无法找到我的错误。
Additionaly: 我使用了另一个教程,它给了我gui和图像的基本代码。在这里有两个按钮可以切换有效的图像。
from Tkinter import *
from random import *
pathy = randint(1, 2)
root = Tk()
prompt = StringVar()
root.title("vision")
label = Label(root, fg="dark green")
label.pack()
frame = Frame(root,background='red')
frame.pack()
canvas = Canvas(height=200,width=200)
canvas.pack()
def Image1():
canvas.delete("all")
image1 = PhotoImage(file = "c2.gif")
canvas.create_image(0,0,anchor='nw',image=image1)
canvas.image = image1
def Image2():
canvas.delete("all")
image1 = PhotoImage(file = "c1.gif")
canvas.create_image(0,0,anchor='nw',image=image1)
canvas.image = image1
TextWindow = Label(frame,anchor = NW, justify = LEFT, bg= 'white', fg = 'blue', textvariable = prompt, width = 75, height=20)
TextWindow.pack(side = TOP)
conversationbutton = Button(frame, text='right button',width=25,fg="green",command = Image1)
conversationbutton.pack(side = RIGHT)
stopbutton = Button(frame, text='left button',width=25,fg="red",command = Image2)
stopbutton.pack(side = RIGHT)
root.mainloop()
答案 0 :(得分:0)
调用mainloop()
函数后,您必须使用回调才能运行自己的代码。 Tkinter after()
方法可用于在一段时间后运行一段代码。
在您的情况下,您的代码看起来像:
def update():
#your code here
root.after(1000, update)
update()
root.mainloop()
在更新函数内部调用root.after()
允许函数继续运行,直到窗口关闭。
effbot中描述的after方法给出的参数为:
root.after(milliseconds, callback)
在您的情况下,您可能需要更频繁地每秒调用处理代码。