2014-01-20 28 views
2

我一直在使用googeling,嘗試過不同方式的加載,但我無法獲得此代碼的工作。我想要一個簡單的定時器,當你按下「開始」時運行一個功能,當你按下「停止」時停止。如何在python中添加啓動/停止GUI的定時器

例如: 當您按下開始時,該功能將每秒打印一個「Hello World」,直到您按停止。

我的一些評論代碼,這樣你可以瞭解快:

import sys 
from Tkinter import * 
from threading import Timer 
# a boolean for telling the timer to stop 
stop_timer = False 

mgui = Tk() 

def work(var): 
    # stop_timers sets to True or False with Start/Stop 
    stop_timer = var 
    # work_done will evaluate if timer should start or be canceled 
    def work_done(var2): 
     stop_timer = var2 
     # if stop was pressed t.start() will be ignored 
     if stop_timer == False: 
      t.start() 
     # if stop was pressed timer will stop 
     if stop_timer == True: 
      print "Stopped!" 
      t.cancel() 
    t = Timer(1, work, [False]) 
    print "Something" 
    work_done(var) 

mgui.geometry('450x450') 
mgui.title('Test') 

cmd1 = lambda: work(False) 
btn = Button(mgui, text="Start", command =cmd1).place(x=50, y=50) 
cmd2 = lambda: work(True) 
btn2 = Button(mgui, text="Stop", command =cmd2).place(x=100, y=50) 

mgui.mainloop() 

正如你所知道的,我是新來的這shizzle! 謝謝,配偶!

+0

tkinter有什麼神聖的東西嗎?或者你會非常反對wxPython中的解決方案? – wnnmaw

+0

我不是一個tkinter傢伙,但我想我可以用PyQt來幫助你。另外你寫的代碼有什麼問題? – gravetii

+2

您的意思是傳統意義上的「計時器」,例如「計算自啓動以來流逝的時間量的事情」?或者「線程」意義上的「計時器」,如「表示只在經過一定時間後應該運行的動作的對象」? – Kevin

回答

1

這是一個通用定時器,您還可以使用after實現一個在Tkinter的:

import time 
import Tkinter as tk 

import threading 

class MyTimer(threading.Thread): 

    def __init__(self, t): 
     super(MyTimer,self).__init__() 
     self.txt = t 
     self.running = True 

    def run(self): 
     while self.running: 
      self.txt['text'] = time.time()   


mgui = tk.Tk() 
mgui.title('Test') 

txt = tk.Label(mgui, text="time") 
txt.grid(row=0,columnspan=2) 

timer = None 
def cmd1(): 
    global timer 
    timer = MyTimer(txt) 
    timer.start() 
def cmd2(): 
    global timer 
    if timer: 
     timer.running = False 
     timer= None 

btn = tk.Button(mgui, text="Start", command =cmd1) 
btn.grid(row=1,column=1) 
btn2 = tk.Button(mgui, text="Stop", command =cmd2) 
btn2.grid(row=1,column=2) 

mgui.mainloop() 
+0

感謝這篇文章,但我並不清楚。我正在尋找的是一個循環功能的計時器。 – Halvurd

+0

_loops是什麼意思function_? –

+0

一個函數被重複調用。我設法讓它與你的代碼一起工作 - 謝謝! – Halvurd

0

通過xndrme的後期編輯一些,我終於得到它的工作。謝謝!

我會在這裏發佈代碼,以便將來可能會使用googlers。

import sys 
from Tkinter import * 
from threading import Timer 

mgui = Tk() 

def cmd2(): 
    global t 
    if t: 
     t.cancel() 

def looper(): 
    global t 
    t = Timer(1, looper) 
    t.start() 
    print "Hello World!" 

mgui.geometry('450x450') 
mgui.title('Test') 

btn = Button(mgui, text="Start", command =looper).place(x=50, y=50) 
btn2 = Button(mgui, text="Stop", command =cmd2).place(x=100, y=50) 

mgui.mainloop() 
相關問題