Как создать таймер с помощью tkinter? - PullRequest
70 голосов
/ 08 марта 2010

Мне нужно написать программу с библиотекой Python's tkinter.

Моя главная проблема в том, что я не знаю, как создать таймер или часы hh:mm:ss.

Мне нужно, чтобы оно само обновилось (я не знаю, как это сделать).

Ответы [ 4 ]

103 голосов
/ 08 марта 2010

В корневых окнах Tkinter есть метод, называемый after, который можно использовать для планирования функции, вызываемой по истечении заданного периода времени.Если эта функция сама вызывает after, вы устанавливаете автоматически повторяющееся событие.

Вот рабочий пример:

# for python 3.x use 'tkinter' rather than 'Tkinter'
import Tkinter as tk
import time

class App():
    def __init__(self):
        self.root = tk.Tk()
        self.label = tk.Label(text="")
        self.label.pack()
        self.update_clock()
        self.root.mainloop()

    def update_clock(self):
        now = time.strftime("%H:%M:%S")
        self.label.configure(text=now)
        self.root.after(1000, self.update_clock)

app=App()

Имейте в виду, что after не гарантирует, что функция будет работать точно в срок.Он только планирует задание, которое будет выполнено через определенный промежуток времени.Если приложение занято, перед вызовом может возникнуть задержка, поскольку Tkinter является однопоточным.Задержка обычно измеряется в микросекундах.

9 голосов
/ 01 декабря 2015

Пример часов Python3 с использованием frame.after (), а не приложения верхнего уровня. Также показывает обновление метки с помощью StringVar ()

#!/usr/bin/env python3

# Display UTC.
# started with https://docs.python.org/3.4/library/tkinter.html#module-tkinter

import tkinter as tk
import time

def current_iso8601():
    """Get current date and time in ISO8601"""
    # https://en.wikipedia.org/wiki/ISO_8601
    # https://xkcd.com/1179/
    return time.strftime("%Y%m%dT%H%M%SZ", time.gmtime())

class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.now = tk.StringVar()
        self.time = tk.Label(self, font=('Helvetica', 24))
        self.time.pack(side="top")
        self.time["textvariable"] = self.now

        self.QUIT = tk.Button(self, text="QUIT", fg="red",
                                            command=root.destroy)
        self.QUIT.pack(side="bottom")

        # initial time display
        self.onUpdate()

    def onUpdate(self):
        # update displayed time
        self.now.set(current_iso8601())
        # schedule timer to call myself after 1 second
        self.after(1000, self.onUpdate)

root = tk.Tk()
app = Application(master=root)
root.mainloop()
4 голосов
/ 26 сентября 2017
from tkinter import *
import time
tk=Tk()
def clock():
    t=time.strftime('%I:%M:%S',time.localtime())
    if t!='':
        label1.config(text=t,font='times 25')
    tk.after(100,clock)
label1=Label(tk,justify='center')
label1.pack()
clock()
tk.mainloop()
1 голос
/ 03 июня 2017

Я только что создал простой таймер, используя шаблон MVP (однако это может быть перебор для этого простого проекта). Он имеет выход, старт / пауза и кнопку остановки. Время отображается в формате ЧЧ: ММ: СС. Подсчет времени осуществляется с использованием потока, который выполняется несколько раз в секунду, и разницы между временем запуска таймера и текущим временем.

Исходный код на github

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...