Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

Пример синхронизации 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()
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()

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top