为了账号安全,请及时绑定邮箱和手机立即绑定

切换不工作的“键盘”Python 和 Tkinter

切换不工作的“键盘”Python 和 Tkinter

慕慕森 2023-05-09 16:00:36
您好,我的开关不起作用,工作代码:当我按下 xa 时,45 秒计时器启动。45 秒后计时器消失,然后当我再次按 x 时没有任何反应。我想要实现的目标:45 秒后我想再次单击 x 以再次启动计时器并继续执行此操作:from tkinter import *import keyboardfrom playsound import playsoundroot = Tk()root.geometry("+0+0")root.overrideredirect(True)root.wm_attributes("-topmost", True)root.wm_attributes("-alpha", 0.01)root.resizable(0, 0)seconds = 45toggle_button = 'x'enabled = Falsedef countdown(time):    if time > 0:        mins, secs = divmod(time, 60)        def color_change(t_time):            if t_time > 10:                return 'green'            elif 7 <= t_time <= 10:                return 'yellow'            elif t_time < 7:                return 'red'        timer_display.config(text="{:02d}:{:02d}".format(mins, secs),                             fg=color_change(time)), root.after(1000, countdown, time - 1)    else:        root.wm_attributes('-alpha', 0.01)def start_countdown():    root.wm_attributes('-alpha', 0.7)    countdown(seconds)timer_display = Label(root, font=('Trebuchet MS', 30, 'bold'), bg='black')timer_display.pack()last_state = Falsewhile True:    key_down = keyboard.is_pressed(toggle_button)    # If the toggle button is pressed, toggle the enabled value and print    if key_down != last_state:        last_state = key_down        if last_state:            enabled = True            if enabled:                start_countdown()                print("Activated")                playsound('count.mp3')            else:                start_countdown()        root.mainloop()
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

在您的代码中,tkinter 循环阻塞了主循环。当计时器完成时,您需要退出 tk 循环。您还需要仅在启动计时器时才启动 tk 循环,否则 tk 循环将永远不会退出。


这是工作代码:


import tkinter as tkr

import keyboard

from playsound import playsound


root = None

timer_display = None


root = tkr.Tk()

root.geometry("+0+0")

root.overrideredirect(True)

root.wm_attributes("-topmost", True)

root.wm_attributes("-alpha", 0.01)

root.resizable(0, 0)


timer_display = tkr.Label(root, font=('Trebuchet MS', 30, 'bold'), bg='black')

timer_display.pack()


seconds = 45


toggle_button = 'x'


enabled = False


def countdown(time):

    if time > 0:

        mins, secs = divmod(time, 60)


        def color_change(t_time):

            if t_time > 10:

                return 'green'

            elif 7 <= t_time <= 10:

                return 'yellow'

            elif t_time < 7:

                return 'red'


        timer_display.config(text="{:02d}:{:02d}".format(mins, secs),

                             fg=color_change(time)), root.after(1000, countdown, time - 1)

    else:

        root.wm_attributes('-alpha', 0.01)

        root.quit()  # exit tk root loop



def start_countdown():

    root.wm_attributes('-alpha', 0.7)

    countdown(seconds)


last_state = False



while True:

    key_down = keyboard.is_pressed(toggle_button)

    # If the toggle button is pressed, toggle the enabled value and print

    if key_down != last_state:

        last_state = key_down

        if last_state:

            enabled = True

            if enabled:

                start_countdown()

                print("Activated")

                playsound('count.mp3')

            else:

                start_countdown()

            root.mainloop()  # timer will exit this loop



查看完整回答
反对 回复 2023-05-09
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信