Tkinter: перенаправить ввод с клавиатуры в другое приложение - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь создать простое приложение для быстрого доступа к кнопкам. Это похоже на виртуальную клавиатуру, которую вы используете для записи в любом открытом и сфокусированном приложении (не в 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()

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...