Я пытаюсь создать простое приложение для быстрого доступа к кнопкам. Это похоже на виртуальную клавиатуру, которую вы используете для записи в любом открытом и сфокусированном приложении (не в Tkinter). Вместо целой клавиатуры у меня была бы пара кнопок, которые активируют некоторые нажатия клавиш (используя pynput).
Проблема в том, что когда я нажимаю кнопку Tkinter, приложение Tkinter получает фокус и, следовательно, , получает нажатие клавиатуры. Я хочу, чтобы приложение Tkinter не фокусировалось на никогда , поэтому при нажатии клавиатура нажимает go на другое приложение (например, Photoshop).
Мне удалось обойти эту проблему это путем установки очереди со всеми событиями щелчка, а затем установки прослушивателя событий, который при вызове обрабатывает эту очередь. Другими словами, нажмите кнопку go назад в Фотошоп, и затем очередь обрабатывается и все действия в очереди вызываются.
Однако это не идеально; Я хотел бы сделать это мгновенно и не требовать от меня go туда-сюда между обоими приложениями. Итак, мой вопрос: как сделать так, чтобы мое приложение tkinter не фокусировалось на ever , или как перенаправить нажатия клавиш на другое приложение, или как заставить его потерять фокус и восстановить его сразу же после его потери. Любой обходной путь подойдет (это для личного использования), я просто не могу найти никакого решения с Tkinter.
Примечание: я нахожусь в Ма c, и если я попробую что-то вроде свернуть приложение так, из-за того, что он переходит обратно в фотошоп, он не работает, потому что я все еще сосредоточен на приложении Tkinter, даже если оно свернуто.
Вот небольшой отрывок из того, что у меня есть:
from tkinter import *
from pynput.keyboard import Controller, Key
from time import sleep
kb = Controller()
window = Tk()
def clicked():
with kb.pressed(Key.cmd):
kb.press('t') # cmd+t, opens a tab in Chrome
queue = []
def process_queue(*args, **kwargs):
if queue:
while queue:
queue.pop(0)() # call the queued function
window.attributes("-topmost", True)
window.wm_attributes("-alpha", .7)
window.title('Shortcuts panel')
window.geometry('350x200')
btn = Button(window, text='Open tab', command=lambda: queue.append(clicked))
btn.grid(column=0, row=0)
btn = Button(window, text='close', command=exit)
btn.grid(column=0, row=1)
window.bind("<FocusOut>", process_queue)
window.mainloop()
Спасибо