我正在制作一个程序,该程序可以复制可选内容,例如,当按下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))
那么我如何使其在后台工作? 在此先感谢。
答案 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
的调用。