Подтвердить что ты не робот

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

Мне нужно закодировать программу с помощью библиотеки tkinter от Python.

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

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

4b9b3361

Ответ 1

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

Ответ 2

Пример 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()

Ответ 3

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

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

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

Ответ 5

У меня есть простой ответ на эту проблему. Я создал тему, чтобы обновить время. В потоке я запускаю цикл while, который получает время и обновляет его. Проверьте приведенный ниже код и не забудьте пометить его как правильный ответ.

from tkinter import *
from tkinter import *
import _thread
import time


def update():
    while True:
      t=time.strftime('%I:%M:%S',time.localtime())
      time_label['text'] = t



win = Tk()
win.geometry('200x200')

time_label = Label(win, text='0:0:0', font=('',15))
time_label.pack()


_thread.start_new_thread(update,())

win.mainloop()