当前位置:  开发笔记 > 编程语言 > 正文

GUI按钮按住 - tkinter

如何解决《GUI按钮按住-tkinter》经验,为你挑选了1个好方法。

我正在尝试用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('',stop_motor)

def stop_motor(event):
       hold_down= False
       print('button released')

button = Button(root, text ="forward")
button.pack(side=LEFT)
root.bind('',button_forward)
root.mainloop()

我试图模拟我在这个答案中找到的东西

我尝试在while一个布尔循环中做到这一点.当用户按下按钮时,布尔值变为True,代码进入while循环.当用户释放按钮时,布尔值会更改为,False并且代码将从循环中退出,但在此代码中,无论是否释放按钮,布尔值始终为true.

编辑:我希望在条件发生之前调用函数.要调用的函数是hold_down(),要检查的条件是按钮被释放.

更新:我找到了一种方法让它工作.



1> Bryan Oakley..:

按下按钮时设置标志,释放按钮时取消设置标志.因为你已经在运行一个循环,所以不需要循环(mainloop)

from Tkinter import * 
running = False
root = Tk()
def start_motor(event):
    global running
    running = True
    print("starting motor...")

def stop_motor(event):
    global running
    print("stopping motor...")
    running = False

button = Button(root, text ="forward")
button.pack(side=LEFT)
button.bind('',start_motor)
button.bind('',stop_motor)
root.mainloop()

假设您在按下按键时确实想要执行某些操作,可以使用设置动画循环after.例如,要在按下按钮时每秒调用一次print语句,您可以添加一个执行print语句的函数,然后安排自己在一秒后调用.停止按钮只需要取消任何待处理的作业.

这是一个例子.与原始代码的主要区别在于添加了一个move函数.我还添加了第二个按钮,以显示如何使用相同的功能前进或后退.

from Tkinter import * 
running = False
root = Tk()
jobid = None

def start_motor(direction):
    print("starting motor...(%s)" % direction)
    move(direction)

def stop_motor():
    global jobid
    root.after_cancel(jobid)
    print("stopping motor...")

def move(direction):
    global jobid
    print("Moving (%s)" % direction)
    jobid = root.after(1000, move, direction)

for direction in ("forward", "backward"):
    button = Button(root, text=direction)
    button.pack(side=LEFT)
    button.bind('', lambda event, direction=direction: start_motor(direction))
    button.bind('', lambda event: stop_motor())

root.mainloop()

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有