Как нажать клавишу и сделать функцию в фоновом режиме tkinter GUI? - PullRequest
1 голос
/ 28 мая 2019

Я создаю программу, которая делает необязательную копию, например, при нажатии клавиши, такой как num 1, которая вставляет то, что вы выбрали в программе, или num 2, которая вставляет то, что вы выбрали в программе. но эта программа должна работать в фоновом режиме (свернуто), но она не работает ..

from tkinter import *
from tkinter import ttk

first = ''
second = ''

root = Tk()
#root.withdraw()
ttk.Label(root, text="1st copy").grid(row=0, column=0, padx=3, sticky='w')

copy1 = ttk.Entry(root, width=36)
copy1.grid(row=0, column=1, columnspan=2)

ttk.Label(root, text="2nd copy").grid(row=1, column=0, padx=3, sticky='w')

copy2 = ttk.Entry(root, width=36)
copy2.grid(row=1, column=1, columnspan=2)

savebutton = ttk.Button(root, text='save')
savebutton.grid(row=2, column=2, sticky='e')
savebutton.config(command=lambda:save())

def save():
    global first, second
    first = copy1.get()
    second = copy2.get()

def BuClick(x):
    global first, second

    root.clipboard_clear()
    if x == 1:
        root.clipboard_append(first)
    else:
        root.clipboard_append(second)
    root.update()



root.bind('1', lambda x = 1:BuClick(1))
root.bind('2', lambda y = 2:BuClick(2))

так как я могу заставить его работать в фоновом режиме ?? Заранее спасибо ..

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

В Tkinter, чтобы сделать что-то в фоновом режиме, вы должны использовать метод после . Это помещает и событие в очередь событий пользовательского интерфейса, которая вызывает вашу функцию после некоторой задержки. В этом случае root.bind('<Key-1>', lambda: root.after_idle(BuClick(first))) должен это сделать. Это планирует вызов BuClick, когда очередь событий простаивает (т.е. не обрабатывает другие события пользовательского интерфейса, такие как движение мыши или перерисовка окна и т. Д.).

0 голосов
/ 28 мая 2019

Вы можете использовать клавиатуру следующим образом.

import keyboard as kb
def call_back():
    pass
kb.add_hotkey("shift+1",call_back,args)
kb.wait()

Это, однако, будет вызвано, даже если фокус не на вашем приложении (если вы использовали другое).

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