需要帮助忽略按钮按下。 Tkinter的

时间:2016-08-26 18:32:55

标签: python

我正在制作秒表计划。如果计时器已经运行,我无法启动按钮。

当我搜索时,我看到相同的14 year old code。我发现很难相信过去14年来所有这些人都独立地达成了同样的解决方案。

作为初学者,我真的很想知道我写的是什么,而不是复制/粘贴和继续。

from tkinter import *
import time
import datetime


class Window(Frame):

    def __init__(self, master = None):
        Frame.__init__(self, master)

        self.master = master

        self.init_window()

    def init_window(self):

        self.master.title('Stopwatch')

        self.pack(fill=BOTH, expand=1)

        quit_button = Button(self, text = 'Quit', command = self.client_exit)
        quit_button.config(width = 9)
        quit_button.place(x=230)

        start_button = Button(self, text = 'Start', command = self.timer_start)
        start_button.config(width= 10)
        start_button.place(x=0, y=0)

        stop_button = Button(self, text = 'Stop', command = self.timer_stop)
        stop_button.config(width = 10)
        stop_button.place(x=80)

        reset_button = Button(self, text = 'Reset', command = self.timer_reset)
        reset_button.config(width = 10)
        reset_button.place(x=160)

        self.is_timer_running = False

    def client_exit(self):
        exit()

    def timer_start(self):
        global sec1
        sec1 = time.time()
        if self.is_timer_running == False:
            self.is_timer_running = True
            def tick():
                if self.is_timer_running == True:
                    sec = time.time()
                    sec = datetime.timedelta(seconds = sec - sec1)
                    clock['text'] = sec
                    clock.after(100, tick)
            tick()

    def timer_stop(self):
        stop_time = time.time()
        if self.is_timer_running == True:
            self.is_timer_running = False
            def tick_stop():
                stop = datetime.timedelta(seconds = stop_time - sec1)
                clock['text'] = stop
            tick_stop()

    def timer_reset(self):
        self.is_timer_running = False
        clock['text'] = '00:00:00'

1 个答案:

答案 0 :(得分:4)

单击按钮后立即将按钮状态设置为禁用(确保更新),然后在计时器停止运行时将其设置恢复正​​常。

start_button.config(state = 'disabled')
start_button.update()

# do whatever you need to do i.e run the stop watch

start_button.update()
start_button.config(state = 'normal') 

感谢@NickBonne进一步澄清:)

  

您需要在self.start_button = start_button中添加self.stop_button = stop_buttoninit_window()。然后,您可以使用self.start_button.config(state="disabled")