Счетчик кликов мыши tkinter не выйдет из моего цикла обратного отсчета

1

Я пытаюсь написать небольшую программу на python, используя tkinter, чтобы подсчитать количество щелчков мышью кнопки за 60 секунд, но у меня есть проблема: я не могу сломать цикл обратного отсчета.

Ниже мой код:

from tkinter import *

class Application(Frame):
    def __init__(self,master):
        super(Application,self).__init__(master)
        self.pack()
        self.bttn_clicks = 0
        self.createWidgets()

    def createWidgets(self):

        self.labelvariable = StringVar()
        self.labelvariable.set("60")

        self.thelabel = Label(self,textvariable = self.labelvariable,font=('Helvetica',50))
        self.thelabel.pack(side=TOP)

        self.firstButton = Button(self, text="Start", command=self.update_count)
        self.firstButton.pack(side=TOP)

    def update_count(self):
        self.bttn_clicks += 1
        self.firstButton["text"] = "Counter: " + str(self.bttn_clicks)
        if self.bttn_clicks == 1:
            countdown(1559)

def countdown(timeInSeconds):
    mins, secs = divmod(timeInSeconds, 60)
    timeformat = "{1:02d}".format(mins, secs)
    app.labelvariable.set(timeformat)
    root.after(1000, countdown, timeInSeconds-1)

if __name__ == '__main__':
    root = Tk()
    root.title("Timer")
    app = Application(root)
    root.mainloop()
Теги:
tkinter

1 ответ

0
Лучший ответ

Что бы я делал, так это держать все в классе. Использование внешней функции просто усложняет управление.

При этом вы должны использовать IntVar() вместо string var, так как это поможет нам отслеживать время.

Сначала мой код будет проверяться, если таймер равен 60. Если это так, начните отсчет и добавьте счетчик. Когда счетчик достигает нуля, кнопка отключена, и она больше не добавляет счетчик.

Другая вещь, которую я изменил, заключалась в добавлении метода менеджера для таймера. Поскольку мы теперь используем IntVar() все, что нам нужно сделать, это команда get() за которой следуют -1 и after() чтобы поддерживать таймер до нуля.

Я также немного очистил ваш код, чтобы следовать стандарту PEP8.

import tkinter as tk

class Application(tk.Frame):
    def __init__(self,master):
        super(Application,self).__init__(master)
        self.bttn_clicks = 0
        self.labelvariable = tk.IntVar()
        self.create_widgets()

    def create_widgets(self):
        self.labelvariable.set(60)
        self.thelabel = tk.Label(self, textvariable=self.labelvariable, font=('Helvetica',50))
        self.thelabel.pack(side=tk.TOP)
        self.firstButton = tk.Button(self, text="Start", command=self.update_count)
        self.firstButton.pack(side=tk.TOP)

    def update_count(self):
        if self.labelvariable.get() == 60:
            self.manage_countdown()
        if self.labelvariable.get() != 0:
            self.bttn_clicks += 1
            self.firstButton.config(text="Counter: {}".format(self.bttn_clicks))
        else:
            self.firstButton.config(command=None)

    def manage_countdown(self):
        if self.labelvariable.get() != 0:
            self.labelvariable.set(self.labelvariable.get() - 1)
            self.after(1000, self.manage_countdown)


if __name__ == '__main__':
    root = tk.Tk()
    root.title("Timer")
    app = Application(root).pack()
    root.mainloop()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню