Python 写一个函数来结束程序?
如何保存设置报警时返回的报警参考,然后取消报警?我需要一个停止功能,以便用户可以结束程序Python 写一个函数来结束程序?,python,tkinter,Python,Tkinter,如何保存设置报警时返回的报警参考,然后取消报警?我需要一个停止功能,以便用户可以结束程序 p = ' IDKMYBFFJILL!' k = 0 def new_char(): global k label.config(text=p[k]) k = (k+1)%len(p) window.after(500,new_char) def end(): window.after.cancel(new_char) from Tkinter import *
p = ' IDKMYBFFJILL!'
k = 0
def new_char():
global k
label.config(text=p[k])
k = (k+1)%len(p)
window.after(500,new_char)
def end():
window.after.cancel(new_char)
from Tkinter import *
window=Tk()
window.title('New char program')
label = Label(window,text='',width=2,font=('Times New Roman',200))
label.grid()
begin_button = Button(window,text='begin',command=new_char)
begin_button.grid(row=1,column=1,sticky='EW')
end_button = Button(window,text='end',command=end)
end_button.grid(row=1,column=2,sticky='EW')
window.mainloop()
您必须捕获的输出,这是一个“报警标识符”,然后可以传递给,即
报警\u取消()
。(注意:语法是带有下划线的alarm\u cancel()
,而不是像您尝试的那样alarm.cancel()
)
一种方法是将报警函数封装在一个类中,我称之为alarm
:
from Tkinter import *
p = ' IDKMYBFFJILL!'
k = 0
# Create Alarm class
class Alarm(object):
def __init__(self):
self.alarm_id = None
def new_char(self):
global k
label.config(text=p[k])
k = (k+1)%len(p)
self.alarm_id = window.after(500,self.new_char)
def end(self):
window.after_cancel(self.alarm_id)
# Create Alarm instance (called alarm)
alarm = Alarm()
window=Tk()
window.title('New char program')
label = Label(window,text='',width=2,font=('Times New Roman',200))
label.grid()
begin_button = Button(window,text='begin',command=alarm.new_char) # Note change
begin_button.grid(row=1,column=1,sticky='EW')
end_button = Button(window,text='end',command=alarm.end) # Note change
end_button.grid(row=1,column=2,sticky='EW')
window.mainloop()
您可以进一步在报警类中移动
p
和k
,从而消除对global
的需要,但无需解决您的问题。您可以设置停止标志,以指示何时停止以及循环停止后要执行的操作:
from Tkinter import *
p = ' IDKMYBFFJILL!'
k = 0
stop_loop = False # the stop flag set when cancel is pressed
def new_char():
global k
if stop_loop: # execute this when you press cancel
print("K value when cancel was stopped: ", k)
return
label.config(text=p[k])
k = (k+1)%len(p)
window.after(500,new_char)
def end():
global stop_loop
stop_loop = True # set the flag that you want to stop (done when pressed cancel button)