之前一直找不到合适的macOS下剪切板管理程序,所以我自己写了一个,代码如下:
import tkinter as tk
import pyperclip
from PIL import ImageTk, Image
import os
# 创建窗口
window = tk.Tk()
window.title("剪切板管理器")
window.geometry("300x400")
window.overrideredirect(True) # 去除窗口边框
window.attributes("-topmost", True) # 窗口置顶
# 创建列表框
listbox = tk.Listbox(window)
listbox.pack(fill=tk.BOTH, expand=True)
# 清空所有复制和剪切的文本或图片
def clear_all():
listbox.delete(0, tk.END)
# 删除选中的之前剪切的文字或图片
def delete_selected():
selected_indices = listbox.curselection()
for index in selected_indices:
listbox.delete(index)
# 一键退出程序并删除所有的复制或剪切记录
def quit_program():
clear_all()
window.destroy()
# 创建按钮框架
button_frame = tk.Frame(window)
button_frame.pack()
# 创建按钮
clear_button = tk.Button(button_frame, text="清空", command=clear_all)
clear_button.pack(side=tk.LEFT, padx=5)
delete_button = tk.Button(button_frame, text="删除", command=delete_selected)
delete_button.pack(side=tk.LEFT, padx=5)
quit_button = tk.Button(button_frame, text="退出", command=quit_program)
quit_button.pack(side=tk.LEFT, padx=5)
# 监听剪贴板
def clipboard_listener():
while True:
content = pyperclip.paste()
if content not in listbox.get(0, tk.END):
listbox.insert(0, content)
window.update()
time.sleep(1)
# 开启剪贴板监听线程
import threading
import time
listener = threading.Thread(target=clipboard_listener)
listener.daemon = True
listener.start()
# 鼠标点击事件处理
def handle_click(event):
selection = listbox.get(listbox.curselection())
if os.path.isfile(selection):
# 如果选择的是图片文件,则显示图片
image = Image.open(selection)
image.show()
else:
# 否则将文本内容放入剪贴板
pyperclip.copy(selection)
# 绑定鼠标点击事件
listbox.bind('<Double-Button-1>', handle_click)
# 运行主循环
window.mainloop()
这个小程序实现功能是:1.该程序界面可以悬浮在桌面上,并且不影响其他程序使用;2.该程序可以同时储存多个复制的内容,并且以列表的形式展示在程序窗口;3.我可以通过鼠标点选需要粘贴的文本或者图片;3.窗口下面有3个按钮,一个按钮清空所有复制和剪切的文本或图片,一个按钮删除选中的之前剪切的文字或图片,还有一个按钮一键退出该程序,并且字退出之前删除所有的复制或者剪切的记录。
程序运行后界面如下: