@dipperok

Как сделать бинд, который работает вне приложения tkinter?

У меня есть самая сырая версия моего приложения для отработки механизма бинда.
В приложении имеются строки для ввода(entry), кнопки "copy" и "clear", кнопка "clear" очищает поле ввода, а кнопка "copy" копирует содержимое строки в буфер обмена с помощью библиотеки "pyperclip". На пример "pyperclip.copy(a)", где "а" строковая переменная.
Мне нужно, что бы я находился в игре, браузере(вне самого окна приложения простым языком говоря) жал допустим кнопку "k" и выполнялась функция, которая считывает вбитое пользователем в entry и копирует в буфер обмена.
def Copy1():
    ai = ent1.get()
    pyperclip.copy(ai)

Я пока не очень представляю, как это можно реализовать, все советуют модули типа "keyboard", но никто не может сказать конкретно, как мне сделать этот бинд, если я нахожусь в игре, или просто окно приложения свернуто.
Для удобства код целиком:
from tkinter import *
import pyperclip


def Clear1():
    v1.set("")
def Copy1():
    ai = ent1.get()
    pyperclip.copy(ai)

def Clear2():
    v2.set("")
def Copy2():
    ai = ent2.get()
    pyperclip.copy(ai)

def Clear3():
    v2.set("")
def Copy3():
    ai = ent3.get()
    pyperclip.copy(ai)


root = Tk()
root.geometry('455x280')
root.title("pp")
root.resizable(False, False)
root.configure(background="#E6F0D5")
#root.iconbitmap('9.ico')


v1 = StringVar()
ent1 = Entry(font=("Ubuntu", 19), textvariable=v1, justify=CENTER)
but1 = Button(root, text='Copy', font=("Ubuntu", 13), height=1, width=20, bg='#F8F8F8', command=Copy1)
but2 = Button(root, text='Clear', font=("Ubuntu", 13), height=1, width=9, bg='#F8F8F8', command=Clear1)

ent1.place(x=82, y=24)
but1.place(x=82, y=60)
but2.place(x=274, y=60)


v2 = StringVar()
ent2 = Entry(font=("Ubuntu", 19), textvariable=v2, justify=CENTER)
but3 = Button(root, text='Copy', font=("Ubuntu", 13), height=1, width=20, bg='#F8F8F8', command=Copy2)
but4 = Button(root, text='Clear', font=("Ubuntu", 13), height=1, width=9, bg='#F8F8F8', command=Clear2)

ent2.place(x=82, y=104)
but3.place(x=82, y=140)
but4.place(x=274, y=140)


v3 = StringVar()
ent3 = Entry(font=("Ubuntu", 19), textvariable=v3, justify=CENTER)
but5 = Button(root, text='Copy', font=("Ubuntu", 13), height=1, width=20, bg='#F8F8F8', command=Copy3)
but6 = Button(root, text='Clear', font=("Ubuntu", 13), height=1, width=9, bg='#F8F8F8', command=Clear3)

ent3.place(x=82, y=184)
but5.place(x=82, y=220)
but6.place(x=274, y=220)

root.mainloop()
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
@GuMondi
Вы слишком много хотите от tkinter, это просто маленькая графическая библиотека, кстати когда окно tkinter не в фокусе оно не обрабатывает события, а вам нужно повесить глобальный хук на клавиатуру, после чего найти окно tkinter и забрать из него нужный текст. Обычно это пишется на с++, но так как все сводится в вызову функций winapi, то можно сделать все на python с помощью библиотеки pywin32
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы