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

“切换不工作”;“键盘”;Python和Tkinter,python,tkinter,Python,Tkinter,你好,我的开关坏了 工作代码:当我按下x键时,一个45秒的计时器启动。45秒后计时器不可见,然后当我再次按下x时,什么也没发生 我想要实现的是:45秒后,我想再次单击x以再次启动计时器并继续此操作: from tkinter import * import keyboard from playsound import playsound root = Tk() root.geometry("+0+0") root.overrideredirect(True) root.w

你好,我的开关坏了

工作代码:当我按下x键时,一个45秒的计时器启动。45秒后计时器不可见,然后当我再次按下x时,什么也没发生

我想要实现的是:45秒后,我想再次单击x以再次启动计时器并继续此操作:

from tkinter import *
import keyboard
from playsound import playsound

root = Tk()

root.geometry("+0+0")
root.overrideredirect(True)
root.wm_attributes("-topmost", True)
root.wm_attributes("-alpha", 0.01)
root.resizable(0, 0)

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)


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 = 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()
从tkinter导入*
输入键盘
从playsound导入playsound
root=Tk()
根几何体(“+0+0”)
root.overrideredirect(True)
root.wm_属性(“-top”,True)
root.wm_属性(“-alpha”,0.01)
根目录。可调整大小(0,0)
秒=45
切换按钮='x'
已启用=错误
def倒计时(时间):
如果时间>0:
分钟,秒=divmod(时间,60)
def颜色变化(t_时间):
如果t_时间>10:
返回“绿色”

elif 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
将tkinter作为tkr导入
输入键盘
从playsound导入playsound
根=无
定时器显示=无
root=tkr.Tk()
根几何体(“+0+0”)
root.overrideredirect(True)
root.wm_属性(“-top”,True)
root.wm_属性(“-alpha”,0.01)
根目录。可调整大小(0,0)
timer_display=tkr.Label(根,字体=('Trebuchet MS',30,'bold'),bg='black'))
timer_display.pack()
秒=45
切换按钮='x'
已启用=错误
def倒计时(时间):
如果时间>0:
分钟,秒=divmod(时间,60)
def颜色变化(t_时间):
如果t_时间>10:
返回“绿色”

elif 7
tkinter
keyboard
模块不兼容。dude其工作在循环中出现问题程序工作一次,但切换不工作。我认为这是可以实现的,我会等待其他人去实现reply@OwenSingh只要调用
main循环
,whileloop就需要中断。也许你会看看这一个原因,模块不能很好地一起玩,因为两者都在低水平处理键盘。使用一个或另一个。谢谢mikey boy你是最好的我尝试了两天多论坛上的每个人和python的discord服务器上的很多地方都说这是不可能的你不能同时使用这两个,但你做到了谢谢伙计你是最好的