Команда ограничения кнопки tkinter не повторяется - PullRequest
1 голос
/ 14 марта 2019

Здравствуйте, я пытаюсь создать приложение таймера обратного отсчета в tkinter, и я использую этот класс, чтобы сделать кнопку, а затем запустить обратный отсчет.Я довольно новичок в python, а также на tkinter.

Проблема в том, что после того, как я нажимаю кнопку несколько раз, она больше выполняет refresh_label, поэтому он быстрее начинает обратный отсчет.

Как я могу предотвратить это?

    class Countdown():
    def __init__(self,minutes, parent):

        self.minutes = minutes
        self.parent = parent
        self.label = Label(parent,text='00:00',font=("Dense", 30),width=10,
                bg= '#e74c3c')
        self.label.place(x= 245, y= 330)
        self.my_time = dt.time(0, self.minutes, 0)
        self.var = 0
        self.start = Button(self.parent,font=('Dense',15),text="Start", height = 4,
                width = 51, fg = "#a1dbcd", bg="#e74c3c", command = self.refresh_label)
        self.start.grid(row= 1,column=0, pady=415)

    def refresh_label(self):
        # This is the method that starts the countdown. I convert my_time 
        # from datetime.time object to datetime.datetime then i subtract
        # a second in each 1000 ms and I refresh the text of the button 
        self.var += 1
        second = (dt.datetime.combine(dt.date(1, 1, 1), self.my_time)- 
        dt.timedelta(seconds = self.var)).time()
        self.label.configure(text=second)
        self.label.after(1000, self.refresh_label)

1 Ответ

1 голос
/ 14 марта 2019

Я бы отключил кнопку после ее нажатия, возможно, до нажатия кнопки паузы или остановки.

Чтобы отключить кнопку, вы можете сделать:

myButton['state'] = 'disabled'

или

from tkinter import DISABLED
mybutton['state'] = DISABLED

Затем я бы изменил функцию обратного вызова кнопки на start_button_pressed:

self.start = tk.Button(self.parent, [...], command=self.start_button_pressed)

def start_button_pressed(self):
    self.start['state'] = DISABLED
    self.refresh_label()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...