Горячие клавиши в фоновом режиме Tkinter

#python #tkinter #hotkeys

#python #tkinter #горячие клавиши

Вопрос:

Я писал простое приложение для подсчета, которое содержит всего 3 счетчика внутри текстовых файлов с интерфейсом GUI. Счетчики могут увеличиваться, уменьшаться и очищаться (сбрасываться на ноль). Я создал горячие клавиши для этого с помощью tkinter, но, похоже, не могу запускать горячие клавиши в качестве фоновых процессов (я полагаю, что это так называется), когда я сворачиваю их или запускаю полноэкранное приложение.

 import tkinter as tkinter
import sys
import os

root = tkinter.Tk()

winCounter = tkinter.IntVar()
tieCounter = tkinter.IntVar()
loseCounter = tkinter.IntVar()

def countUp(counter):
    counter.set(counter.get()   1)
    counter4file = str((counter.get()   1) - 1)
    if counter == winCounter:
        file = open("winsCounter.txt","w ")
        file.write(counter4file)
        file.close()
    elif counter == loseCounter:
        file = open("loseCounter.txt","w ")
        file.write(counter4file)
        file.close()
    else:
        file = open("tiesCounter.txt","w ")
        file.write(counter4file)
        file.close()

def countDown(counter):
    counter.set(counter.get() - 1)
    counter4file = str((counter.get() - 1)   1)
    if counter == winCounter:
        file = open("winsCounter.txt","w ")
        file.write(counter4file)
        file.close()
    elif counter == loseCounter:
        file = open("loseCounter.txt","w ")
        file.write(counter4file)
        file.close()
    else:
        file = open("tiesCounter.txt","w ")
        file.write(counter4file)
        file.close()

def countClear(event=None):
    winCounter.set(0)
    loseCounter.set(0)
    tieCounter.set(0)
    zeroOut = "0"
    file1 = open("winsCounter.txt","w ")
    file2 = open("loseCounter.txt","w ")
    file3 = open("tiesCounter.txt","w ")
    file1.write(zeroOut)
    file2.write(zeroOut)
    file3.write(zeroOut)
    file1.close()
    file2.close()
    file3.close()
    #os.remove("winsCounter.txt")
    #os.remove("tiesCounter.txt")
    #os.remove("loseCounter.txt")

tkinter.Label(root, textvariable=winCounter, fg = "white", bg ="green", font = "Verdana 30 bold").pack()
tkinter.Label(root, textvariable=tieCounter, fg = "white", bg ="green", font = "Verdana 30 bold").pack()
tkinter.Label(root, textvariable=loseCounter, fg = "white", bg ="green", font = "Verdana 30 bold").pack()

winUp = tkinter.Button(root, text="Win  1", command=lambda: countUp(winCounter)).pack()
winDown = tkinter.Button(root, text="Win -1", command=lambda: countDown(winCounter)).pack()
tieUp = tkinter.Button(root, text="Tie  1", command=lambda: countUp(tieCounter)).pack()
tieDown = tkinter.Button(root, text="Tie -1", command=lambda: countDown(tieCounter)).pack()
loseUp = tkinter.Button(root, text="Lose  1", command=lambda: countUp(loseCounter)).pack()
loseDown = tkinter.Button(root, text="Lose -1", command=lambda: countDown(loseCounter)).pack()
clearAll = tkinter.Button(root, text="CLEAR!!", command=lambda: countClear()).pack()

root.bind("<Control-F1>", lambda event: countUp(winCounter))
root.bind("<Control-F2>", lambda event: countDown(winCounter))
root.bind("<Control-F5>", lambda event: countUp(tieCounter))
root.bind("<Control-F6>", lambda event: countDown(tieCounter))
root.bind("<Control-F7>", lambda event: countUp(loseCounter))
root.bind("<Control-F8>", lambda event: countDown(loseCounter))
root.bind("<Control-F4>", lambda event: countClear())

root.mainloop()
  

Любая помощь приветствуется, большое вам спасибо

Комментарии:

1. Вам придется запросить об этом ОС. Какую ОС вы используете?

2. Windows 10, 64-разрядная версия

3. В Windows есть функция RegisterHotKey , которую вы можете использовать. Вот пример python .