如何在tkinter中取消正在运行的脚本

如何在tkinter中取消正在运行的脚本,tkinter,Tkinter,我想申请我的树莓皮。照相用的间隔计。我用tkinter制作了一个GUI,但我找不到取消正在运行的脚本的方法,因为脚本运行时所有按钮都被阻止。 可能这是不可能的,因为我的脚本包含循环(对于范围()中的i。。。 我一直在尝试“.after”方法,但是这个方法只是停止脚本而没有取消它。 感谢advence提供的帮助您可以尝试使用线程或多进程。您可以参考了解更多信息。此外,如果您只想停止脚本运行,您可以从终端向程序发送SIGKILL信号(命令为killall Python-9)或者在程序中添加一个调用s

我想申请我的树莓皮。照相用的间隔计。我用tkinter制作了一个GUI,但我找不到取消正在运行的脚本的方法,因为脚本运行时所有按钮都被阻止。 可能这是不可能的,因为我的脚本包含循环(对于范围()中的i。。。 我一直在尝试“.after”方法,但是这个方法只是停止脚本而没有取消它。
感谢advence提供的帮助

您可以尝试使用线程或多进程。您可以参考了解更多信息。此外,如果您只想停止脚本运行,您可以从终端向程序发送SIGKILL信号(命令为
killall Python-9
)或者在程序中添加一个调用sys.exit()的按钮,您可以尝试使用线程或多进程。您可以参考了解更多信息。此外,如果您只想停止脚本运行,您可以从终端向程序发送SIGKILL信号(命令为
killall Python-9
)或者在程序中添加一个调用
sys.exit()

课堂示例:

def __init__(self, master):

    self.etfilm = Label(root,width=12, font=('arial narrow', 14, 'normal'),fg="white", bg="green")
    self.etfilm.grid(row=0, column=0,columnspan=1, padx=3, pady=2, sticky=NSEW)
    self.etstatus = Label(root,width=12, font=('arial narrow', 14, 'normal'),bg="yellow")
    self.etstatus.grid(row=0, column=1,columnspan=1, padx=3, pady=2, sticky=NSEW)
    self.textBox = Text(root,height= 1,width=2, relief=SUNKEN, font=('arial', 18, 'normal'),)
    self.textBox.grid(row=0, column=2, ipadx=13, padx=0, sticky=NSEW)
    self.botshoot = Button(root, width=18, font=('arial narrow', 30, 'normal'), text="START ", activebackground="#00dfdf")
    self.botshoot.grid(row=4, rowspan=2, column=0,columnspan=3,ipady=15,pady=1, sticky=NSEW)
    self.botshoot.configure(command=self.start)
    self.botkam = Button(root,width=10, font=('arial', 24, 'normal'), text="VIDEO SETTINGS", activebackground="#00dfdf")
    self.botkam.grid(row=6, rowspan=3, column=0,columnspan=2, pady=1, sticky=NSEW)
    self.botkamStop = Button(root,width=3, font=('arial', 24, 'normal'), text="STOP", activebackground="#00dfdf")
    self.botkamStop.grid(row=6, rowspan=3, column=2, pady=1, sticky=NSEW)
    self.botSelf = Button(root,width=10, font=('arial', 24, 'normal'), text="ACTIVATE SELFTIMER", activebackground="#00dfdf")
    self.botSelf.grid(row=9, rowspan=3, column=0,columnspan=2, pady=1, sticky=NSEW)
    self.botSelf1 = Button(root,width=3, font=('arial', 24, 'normal'), text="STOP", activebackground="#00dfdf")
    self.botSelf1.grid(row=9, rowspan=3, column=2, pady=1, sticky=NSEW)       
    self.botConf = Button(root,heigh=2, font=('arial', 18, 'normal'), text="CONFIGURE", activebackground="red")
    self.botConf.grid(row=12, rowspan=3, column=0,columnspan=1, pady=1, sticky=NSEW)
    self.botStop = Button(root,heigh=2, font=('arial', 18, 'normal'), text="STOP/RESET", activebackground="red")
    self.botStop.grid(row=12, rowspan=3, column=1,columnspan=2, pady=1, sticky=NSEW)
    self.botStop.configure(state=DISABLED,command=self.stop)

def start(self):
    self.count = 0
    self.cancel_id = None
    self.botConf.configure(state=DISABLED)
    self.botshoot.configure(state=DISABLED)
    self.botStop.configure(state=NORMAL)
    self.counter()

def counter(self):
    self.textBox.delete("1.0", END)
    if self.count < 10:
        self.count += 1
        self.textBox.insert(END, str(self.count)+'\n\n')
        self.cancel_id = self.textBox.after(1000, self.counter)

        root.update_idletasks()
        print(self.count)
def stop(self):
    if self.cancel_id is not None:
        self.textBox.after_cancel(self.cancel_id)
        self.cancel_id = None
        self.textBox.insert(END, 0)
        self.textBox.delete("1.0", END)
        self.botConf.configure(state=NORMAL)
        self.botshoot.configure(state=NORMAL)
def\uuuuu init\uuuuuuuuuu(自,主):
self.etfilm=标签(根,宽度=12,字体=('arial窄带',14,'normal'),fg=“白色”,bg=“绿色”)
self.etfilm.grid(行=0,列=0,列span=1,padx=3,pady=2,粘性=NSEW)
self.etstatus=Label(根,宽度=12,字体=('arial窄',14,'normal'),bg=“黄色”)
self.etstatus.grid(行=0,列=1,列span=1,padx=3,pady=2,sticky=NSEW)
self.textBox=Text(根,高度=1,宽度=2,浮雕=凹陷,字体=('arial',18,'normal'),)
self.textBox.grid(行=0,列=2,ipadx=13,padx=0,粘性=NSEW)
self.botshoot=按钮(根,宽度=18,字体=('arial窄',30,'normal'),text=“开始”,activebackground=“#00dfdff”)
self.botshoot.grid(行=4,行span=2,列=0,列span=3,ipady=15,pady=1,粘性=NSEW)
self.botshoot.configure(命令=self.start)
self.botkam=按钮(根,宽度=10,字体=('arial',24,'normal'),text=“视频设置”,activebackground=“#00dfdff”)
self.botkam.grid(行=6,行span=3,列=0,列span=2,pady=1,粘性=NSEW)
self.botkamStop=按钮(根,宽度=3,字体=('arial',24,'normal'),text=“STOP”,activebackground=“#00dfdff”)
self.botkamStop.grid(行=6,行跨度=3,列=2,pady=1,粘性=NSEW)
self.botSelf=按钮(根,宽度=10,字体=('arial',24,'normal'),text=“激活自拍器”,activebackground=“#00DFDFDF”)
self.botSelf.grid(行=9,行span=3,列=0,列span=2,pady=1,粘性=NSEW)
self.botSelf1=按钮(根,宽度=3,字体=('arial',24,'normal'),text=“停止”,activebackground=“#00dfdff”)
self.botSelf1.grid(行=9,行span=3,列=2,pady=1,粘性=NSEW)
self.botConf=按钮(root,heigh=2,font=('arial',18,'normal'),text=“CONFIGURE”,activebackground=“red”)
self.botConf.grid(row=12,rowspan=3,column=0,columnspan=1,pady=1,sticky=NSEW)
self.botStop=按钮(root,heigh=2,font=('arial',18,'normal'),text=“停止/重置”,activebackground=“红色”)
self.botStop.grid(row=12,rowspan=3,column=1,columnspan=2,pady=1,sticky=NSEW)
self.botStop.configure(状态=禁用,命令=self.stop)
def启动(自):
self.count=0
self.cancel\u id=None
self.botConf.configure(状态=禁用)
self.botshoot.configure(状态=禁用)
self.botStop.configure(状态=正常)
self.counter()
def计数器(自身):
self.textBox.delete(“1.0”,结束)
如果self.count<10:
self.count+=1
self.textBox.insert(END,str(self.count)+'\n\n')
self.cancel\u id=self.textBox.after(1000,self.counter)
root.update_idletasks()
打印(自计数)
def停止(自):
如果self.cancel\u id不是None:
self.textBox.after\u cancel(self.cancel\u id)
self.cancel\u id=None
self.textBox.insert(结束,0)
self.textBox.delete(“1.0”,结束)
self.botConf.configure(状态=正常)
self.botshoot.configure(状态=正常)
root=Tk() 示例(根) root.mainloop()

课堂示例:

def __init__(self, master):

    self.etfilm = Label(root,width=12, font=('arial narrow', 14, 'normal'),fg="white", bg="green")
    self.etfilm.grid(row=0, column=0,columnspan=1, padx=3, pady=2, sticky=NSEW)
    self.etstatus = Label(root,width=12, font=('arial narrow', 14, 'normal'),bg="yellow")
    self.etstatus.grid(row=0, column=1,columnspan=1, padx=3, pady=2, sticky=NSEW)
    self.textBox = Text(root,height= 1,width=2, relief=SUNKEN, font=('arial', 18, 'normal'),)
    self.textBox.grid(row=0, column=2, ipadx=13, padx=0, sticky=NSEW)
    self.botshoot = Button(root, width=18, font=('arial narrow', 30, 'normal'), text="START ", activebackground="#00dfdf")
    self.botshoot.grid(row=4, rowspan=2, column=0,columnspan=3,ipady=15,pady=1, sticky=NSEW)
    self.botshoot.configure(command=self.start)
    self.botkam = Button(root,width=10, font=('arial', 24, 'normal'), text="VIDEO SETTINGS", activebackground="#00dfdf")
    self.botkam.grid(row=6, rowspan=3, column=0,columnspan=2, pady=1, sticky=NSEW)
    self.botkamStop = Button(root,width=3, font=('arial', 24, 'normal'), text="STOP", activebackground="#00dfdf")
    self.botkamStop.grid(row=6, rowspan=3, column=2, pady=1, sticky=NSEW)
    self.botSelf = Button(root,width=10, font=('arial', 24, 'normal'), text="ACTIVATE SELFTIMER", activebackground="#00dfdf")
    self.botSelf.grid(row=9, rowspan=3, column=0,columnspan=2, pady=1, sticky=NSEW)
    self.botSelf1 = Button(root,width=3, font=('arial', 24, 'normal'), text="STOP", activebackground="#00dfdf")
    self.botSelf1.grid(row=9, rowspan=3, column=2, pady=1, sticky=NSEW)       
    self.botConf = Button(root,heigh=2, font=('arial', 18, 'normal'), text="CONFIGURE", activebackground="red")
    self.botConf.grid(row=12, rowspan=3, column=0,columnspan=1, pady=1, sticky=NSEW)
    self.botStop = Button(root,heigh=2, font=('arial', 18, 'normal'), text="STOP/RESET", activebackground="red")
    self.botStop.grid(row=12, rowspan=3, column=1,columnspan=2, pady=1, sticky=NSEW)
    self.botStop.configure(state=DISABLED,command=self.stop)

def start(self):
    self.count = 0
    self.cancel_id = None
    self.botConf.configure(state=DISABLED)
    self.botshoot.configure(state=DISABLED)
    self.botStop.configure(state=NORMAL)
    self.counter()

def counter(self):
    self.textBox.delete("1.0", END)
    if self.count < 10:
        self.count += 1
        self.textBox.insert(END, str(self.count)+'\n\n')
        self.cancel_id = self.textBox.after(1000, self.counter)

        root.update_idletasks()
        print(self.count)
def stop(self):
    if self.cancel_id is not None:
        self.textBox.after_cancel(self.cancel_id)
        self.cancel_id = None
        self.textBox.insert(END, 0)
        self.textBox.delete("1.0", END)
        self.botConf.configure(state=NORMAL)
        self.botshoot.configure(state=NORMAL)
def\uuuuu init\uuuuuuuuuu(自,主):
self.etfilm=标签(根,宽度=12,字体=('arial窄带',14,'normal'),fg=“白色”,bg=“绿色”)
self.etfilm.grid(行=0,列=0,列span=1,padx=3,pady=2,粘性=NSEW)
self.etstatus=Label(根,宽度=12,字体=('arial窄',14,'normal'),bg=“黄色”)
self.etstatus.grid(行=0,列=1,列span=1,padx=3,pady=2,sticky=NSEW)
self.textBox=Text(根,高度=1,宽度=2,浮雕=凹陷,字体=('arial',18,'normal'),)
self.textBox.grid(行=0,列=2,ipadx=13,padx=0,粘性=NSEW)
self.botshoot=按钮(根,宽度=18,字体=('arial窄',30,'normal'),text=“开始”,activebackground=“#00dfdff”)
self.botshoot.grid(行=4,行span=2,列=0,列span=3,ipady=15,pady=1,粘性=NSEW)
self.botshoot.configure(命令=self.start)
self.botkam=按钮(根,宽度=10,字体=('arial',24,'normal'),text=“视频设置”,activebackground=“#00dfdff”)
self.botkam.grid(行=6,行span=3,列=0,列span=2,pady=1,粘性=NSEW)
self.botkamStop=按钮(根,宽度=3,字体=('arial',24,'normal'),text=“STOP”,activebackground=“#00dfdff”)
self.botkamStop.grid(行=6,行跨度=3,列=2,pady=1,粘性=NSEW)
self.botSelf=按钮(根,宽度=10,字体=('arial',24,'normal'),text=“激活自拍器”,activebackground=“#00DFDFDF”)
self.botSelf.grid(行=9,行span=3,列=0,列span=2,pady=1,粘性=NSEW)
self.botSelf1=按钮(根,宽度=3,字体=('arial',24,'normal'),text=“停止”,activebackground=“#00dfdff”)
self.botSelf1.grid(行=9,行span=3,列=2,pady=1,粘性=NSEW)
self.botConf=按钮(root,heigh=2,font=('arial',18,'normal'),text=“CONFIGURE”,activebackground=“red”)
self.botConf.grid(row=12,rowspan=3,column=0,columnspan=1,pady=1,sticky=NSEW)
self.botStop=按钮(根,高=2,字体=('arial',18,'normal'),文本=