簡體   English   中英

如何使計時器/程序僅在按鍵而不是立即打開后才打開?

[英]How to make timer/program open only after pressing key instead of immediately?

我只需要在按下一個鍵后才打開此時鍾,讓我們說“ t”。 現在,它在運行后立即打開。

import tkinter as tk

def update_timeText():
    if (state):
        global timer
        timer[2] += 1
    if (timer[2] >= 100):
        timer[2] = 0
        timer[1] += 1
    if (timer[1] >= 60):
        timer[0] += 1
        timer[1] = 0
    timeString = pattern.format(timer[0], timer[1], timer[2])
    timeText.configure(text=timeString)
    root.after(10, update_timeText)

def start():
    global state
    state=True

state = False
root = tk.Tk()
root.wm_title('Simple Kitchen Timer Example')

timer = [0, 0, 0]
pattern = '{0:02d}:{1:02d}:{2:02d}'

timeText = tk.Label(root, text="00:00:00", font=("Helvetica", 50))
timeText.pack()

startButton = tk.Button(root, text='Start', command=start)
startButton.pack()

update_timeText()
root.mainloop()

它在另一個程序中,因此當我有圖形窗口時,我將按“ t”,時鍾將打開。

鍵盤是可以檢測擊鍵的python模塊。 通過執行此命令進行安裝。

pip install keyboard

現在您可以執行此操作。

while True:
           try: 
               if keyboard.is_pressed('t'):
                   state = True 
               elif(state != True):
                   pass
            except:
                state = False
                break #a key other than t the loop will break

我建議您稍微組織一下代碼,例如類結構。 一種可能的實現是這樣的:

import tkinter as tk
TIMER = [0, 0, 0]
PATTERN = '{0:02d}:{1:02d}:{2:02d}'


class Timer:
    def __init__(self, master):
        #I init some variables
        self.master = master
        self.state = False

        self.startButton = tk.Button(root, text='Start', command=lambda: self.start())
        self.startButton.pack()

        self.timeText = tk.Label(root, text="00:00:00", font=("Helvetica", 50))
        self.timeText.pack()

    def start(self):
        self.state = True
        self.update_timeText()

    def update_timeText(self):
        if (self.state):
            global TIMER
            TIMER[2] += 1
        if (TIMER[2] >= 100):
            TIMER[2] = 0
            TIMER[1] += 1
        if (TIMER[1] >= 60):
            TIMER[0] += 1
            TIMER[1] = 0
        timeString = PATTERN.format(TIMER[0], TIMER[1], TIMER[2])
        self.timeText.configure(text=timeString)
        self.master.after(10, self.update_timeText)

if __name__ == '__main__':
    root = tk.Tk()
    root.geometry("900x600")
    root.title("Simple Kitchen Timer Example")
    graph_class_object = Timer(master=root)
    root.mainloop()

因此,當您單擊按鈕時,時鍾將開始。 如果要通過按鍵盤上的“ t”來啟動時鍾,則需要將該鍵綁定到您的函數。 如果您想在單擊按鈕一次以上時停止時鍾,也可以添加功能。

編輯:如果您還想通過單擊按鈕開始顯示時鍾,則可以移動用於初始化label的代碼以啟動功能。

def start(self):
   self.state = True
   self.timeText = tk.Label(root, text="00:00:00", font=("Helvetica", 50))
   self.timeText.pack()
   self.update_timeText()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM