按下go按钮后如何重复功能,直到按下停止按钮? (tkinter,python 2.7)

时间:2016-11-16 09:45:02

标签: python-2.7 loops time tkinter

我正在尝试创建一个有两个按钮的程序" stop"和"去。" "去"反复打印"跑步"每5秒钟直到按钮"停止"被压了。这可以在python 2.7中使用tkinter吗?到目前为止,这是我的代码......

from Tkinter import *

class startGo():
    def __init__(self, master=None):
        self.master = master
        self.displayMain()    
        self.master.rowconfigure(0, weight=1)
        self.master.columnconfigure(0, weight=1)

    def fnCreateWidgets(self):
        self.frWindow = Frame()
        self.frWindow.grid(sticky=N+S+E+W)

        self.frWindow.update()

    def displayMain(self):
        self.cvOne = Canvas(self.master, bd=0, highlightthickness=0)
        self.cvOne.grid(row=0, column=0, sticky=N+S+E+W)
        self.frmWindowOne = Frame(self.cvOne)
        self.master.title("StopGo")
        self.master.minsize(100, 100)

        self.frmWindowOne.grid()

        self.frmWindowOne.btnStop = Button(self.frmWindowOne, text="Stop", font=("MagdaCleanMono", 12), command=self.stop)
        self.frmWindowOne.btnStop.grid(row=2, column=1, sticky=EW)

        self.frmWindowOne.btnGo = Button(self.frmWindowOne, text="Go", font=("MagdaCleanMono", 12), command=self.go)
        self.frmWindowOne.btnGo.grid(row=2, column=1, sticky=EW)

    def go(self):
        #code

    def stop(self):
        #code

root = Tk()
app = startGo(root)
root.mainloop()

1 个答案:

答案 0 :(得分:1)

简单的例子:

import tkinter as tk

class MyApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        tk.Button(self, text="Start", command=self.do_something).pack()
        tk.Button(self, text="Stop", command=self.stop).pack()

    def do_something(self):
        print("Doing Something")
        self.after_id = self.after(500, self.do_something)

    def stop(self):
        self.after_cancel(self.after_id)

if __name__ == "__main__":
    app = MyApp()
    app.mainloop()

因此,当您按下开始按钮时,它会直接调用该功能

然后调用after函数,将自身作为500ms后运行的目标

在函数完成后,脚本重新进入tkinter mainloop,直到它再次运行为止。

停止脚本,我们使用之前保存的ID取消之后。