如何在tkinter GUI的背景下按下按键并执行功能?

时间:2019-05-28 10:46:15

标签: python tkinter

我正在制作一个程序,该程序可以复制可选内容,例如,当按下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 :(得分:0)

您可以使用这样的键盘。

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

但是,即使焦点不在您的应用程序上(如果您使用的是其他应用程序),也会被调用。

答案 1 :(得分:0)

在Tkinter中,要在后台执行某些操作,您应该使用after方法。这会将事件放置到UI事件队列中,该事件在一段时间后会调用您的函数。在这种情况下,root.bind('<Key-1>', lambda: root.after_idle(BuClick(first)))应该这样做。一旦事件队列闲置(即:不处理其他UI事件,例如鼠标移动或窗口重绘等),这将安排对BuClick的调用。