Как сделать так, чтобы таймер / программа открывались только после нажатия клавиши, а не сразу? - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно открыть эти часы только после нажатия клавиши, скажем, «т».Теперь он открывается сразу после запуска.

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", и часы откроются.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Я бы порекомендовал вам немного организовать код, например, структуру классов.Одна из возможных реализаций была бы такой:

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()
0 голосов
/ 28 ноября 2018

Клавиатура - это модуль 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...