带tkinter的秒表?

2024-04-30 05:50:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我承担了使用python和tkinter制作魔方计时器的任务。我想知道是否有办法使用“回车”键或空格键启动/停止秒表。我不使用tkinter窗口就可以实现这一点,但我不知道如何让tkinter在不改变输入字段的情况下检测按键。我附加的代码是不带tkinter的秒表功能

def stopwatch():
    import time
    print("")

    start = input("Press 'Enter' to start timer")

    begin = time.time()
    endtimer = input("Press 'Enter' to end the timer")
    end = time.time()

    time = end-begin
    time = float(round(time,3))
    text = ""
    if time >= 60.999:
        newTime = time/60
        text += ("The final time was " + str(newTime) + " minutes")
    else:
        text += ("The final time was " + str(time) + " seconds")

    return text

使用TKINTER的文件

from tkinter import *
from timer import *
from scrambler import *
from colors import *
window = Tk()
window.title("Bryson's Scrambler")
lbl = Label(window, text=sprint(valid(s)))
lbl.grid(column=0, row=0)
lbl2 = Label(window, text=stopwatch())
lbl2.grid(column=10, row=10)
window.mainloop()

Tags: totextfromimportinputtimetkinterwindow
1条回答
网友
1楼 · 发布于 2024-04-30 05:50:29

我已经为秒表制作了一个小型原型,所以只需在这里复制代码。看起来它能解决你的需要

import tkinter as tk
import time


class Timer:
    def __init__(self):
        self.root = tk.Tk()
        self.sv = tk.StringVar()
        self.start_time = None
        self.is_running = False

        self.make_widgets()
        self.root.bind('<Return>', self.startstop)
        self.root.mainloop()

    def make_widgets(self):
        tk.Label(self.root, textvariable=self.sv, font='ariel 15').pack()

        btn_frame = tk.Frame(self.root)
        btn_frame.pack()
        tk.Button(btn_frame, text='Start', command=self.start).pack(side=tk.LEFT)
        tk.Button(btn_frame, text='Stop', command=self.stop).pack(side=tk.RIGHT)

    def start(self):
        if not self.is_running:
            self.start_time = time.time()
            self.timer()
            self.is_running = True

    def timer(self):
        self.sv.set(self.format_time(time.time() - self.start_time))
        self.after_loop = self.root.after(50, self.timer)

    def stop(self):
        if self.is_running:
            self.root.after_cancel(self.after_loop)
            self.is_running = False

    def startstop(self, event=None):
        if self.is_running:
            self.stop()
        else:
            self.start()

    @staticmethod
    def format_time(elap):
        hours = int(elap / 3600)
        minutes = int(elap / 60 - hours * 60.0)
        seconds = int(elap - hours * 3600.0 - minutes * 60.0)
        hseconds = int((elap - hours * 3600.0 - minutes * 60.0 - seconds) * 10)
        return '%02d:%02d:%02d:%1d' % (hours, minutes, seconds, hseconds)


Timer()

相关问题 更多 >