我想用python做一个GUI来控制我的机器人车。我的问题是我如何做一个决定按下按钮的函数。我想在按下并按住按钮时移动汽车,在松开按钮时停车。
from Tkinter import *
hold_down = False
root = Tk()
def button_hold(event):
hold_down=true
while hold_down== True:
print('test statement')
hold_down = root.bind('<ButtonRelease-1>',stop_motor)
def stop_motor(event):
hold_down= False
print('button released')
button = Button(root, text ="forward")
button.pack(side=LEFT)
root.bind('<Button-1>',button_forward)
root.mainloop()
我试图模拟我在这个answer中发现的东西
我试图用布尔值在while
循环中完成它。当用户按下按钮时,布尔值变为True
,代码进入while循环。当用户释放按钮时,布尔值变为False
,代码从循环中退出,但在这段代码中,无论我是否释放按钮,布尔值始终保持为真。
编辑:我希望在条件出现之前调用函数。要调用的函数是hold_down(),要检查的条件是按钮被释放。
最新消息:我找到了一个办法让它发挥作用。
基于布莱恩·奥克利的答案,他用旗帜来模拟按下和按住按钮。问题是,在tkinter应用程序中不能有while循环来表示在运行move car forward时。
所以我建议用线。这样你就可以在后台运行一个while循环来检查汽车是否应该向前移动。
按下按钮时设置标志,松开按钮时取消设置标志。不需要循环,因为您已经在运行循环(
mainloop
)假设您确实想在按下键时执行某些操作,则可以使用
after
设置动画循环。例如,要在按下按钮时每秒调用一次print语句,可以添加一个函数来执行print语句,然后在一秒钟后安排调用它自己。停止按钮只需要取消任何挂起的作业。这里有一个例子。与原始代码的主要区别是添加了一个
move
函数。我还添加了第二个按钮,以显示如何使用相同的功能前进或后退。您可能需要尝试
repeatinterval
选项。它的工作方式是,只要用户按住按钮,它就会不断地启动。参数repeatinterval
实际上让程序知道,如果是,它应该多长时间触发一次按钮。以下是解释的链接:http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/button.html
在页面中搜索“repeatinterval”。
此参数的另一个名称是
repeatdelay
。相关问题 更多 >
编程相关推荐