python按键退出循环_python – TKinter – 如何使用停止按钮停止循环?

你的代码有几个问题.首先,你不应该在Tkinter程序中使用time.sleep(),因为它会干扰mainloop().相反,通常使用通用窗口小部件方法

.after()来调度在指定延迟之后运行的函数.

其次,你没有正确使用全局变量.为函数中的命名变量赋值时,它将创建一个局部变量,除非该名称先前已声明为全局变量.因此,例如,您的stop()函数正在创建一个名为running的局部变量,并将其值设置为0,而不是更改具有相同名称的全局变量的值.

以前的规则不适用于仅引用(读取)变量的当前值.这就是为什么没有在start()中声明Freq和Dur全局变量的原因.

另一个问题是你的start()函数中的sec%1 == 0.任何值%1都是0.要检查奇数/均匀度,请使用秒%2.

import Tkinter

import tkMessageBox

import time

import winsound

FREQ = 2500

DUR = 150

after_id = None

secs = 0

def beeper():

global after_id

global secs

secs += 1

if secs % 2 == 0: # every other second

winsound.Beep(FREQ, DUR)

after_id = top.after(1000, beeper) # check again in 1 second

def start():

global secs

secs = 0

beeper() # start repeated checking

def stop():

global after_id

if after_id:

top.after_cancel(after_id)

after_id = None

top = Tkinter.Tk()

top.title('MapAwareness')

top.geometry('200x100')

startButton = Tkinter.Button(top, height=2, width=20, text="Start",

command=start)

stopButton = Tkinter.Button(top, height=2, width=20, text="Stop",

command=stop)

startButton.pack()

stopButton.pack()

top.mainloop()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值