it-swarm.com.ru

Как создать таймер с помощью tkinter?

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

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

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

70
Diego Castro

В корневых окнах 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 является однопоточным. Задержка обычно измеряется в микросекундах.

103
Bryan Oakley

Пример часов 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()
9
David Poole
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()
4
Ravikiran D

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

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

1
Herman Yanush