程序的两个目标:#1单击按钮后将笔记复制到剪贴板;和#2使按钮小部件在程序重新启动后仍然存在。 (本文仅关注目标1)。按钮已按预期填充,但命令无法正常运行(尽管没有错误)。我尝试了其他剪贴板模块,例如pyperclip,但没有运气。抱歉,如果很难做到这一点,我上周刚开始学习python作为我的第一门编程语言。
我想知道如何使按钮将相应的注释复制到剪贴板。
from tkinter import *
import json
root = Tk()
root.title("CopyNotes")
root.geometry()
json_file = open("dictionary.json", encoding="utf-8")
mynotes = json.load(json_file)
for keys in mynotes:
btnz = Button(root, text=mynotes[keys][0], font="Helvetica 10 bold", bg="silver", command=root.clipboard_append(mynotes[keys][1]), height=2, width=13).pack(side=TOP, fill=BOTH, expand=YES)
root.mainloop()
因此,为了清楚起见,我要解决的问题是button命令无法正常工作。第一次按下任何按钮时,它都会复制“ button1notebutton2notebutton3note”,然后完全停止工作。 我想要第一个按钮实现的效果:root.clipboard_append(button1note) 其余的等等。
弄清楚如何做到这一点之后,我打算接受用户输入以通过添加到字典中来添加自己的按钮。 编辑:修复了剪贴板问题-
mynotes = pickle.load(open("note.p", "rb"))
print(mynotes)
for keys in mynotes:
thenotes = mynotes[keys][1]
mybtnz = Button(ctowin, text=mynotes[keys][0], font="Helvetica 10 bold", bg="silver",
command=lambda thenotes=thenotes: pyperclip.copy(thenotes), height=2, width=13)\
.pack(side=TOP, fill=BOTH, expand=YES)
答案 0 :(得分:1)
您不需要使用json,因为您不是在使用JSON对象而是python字典。
在这里,您的代码经过了重构,以使用3个按钮填充应用程序;
[更新]尽管您将需要完全重构代码,因为您的for
循环会立即用字典中的所有内容填充剪贴板。
from tkinter import *
from tinydb import TinyDB, Query
db = TinyDB('clipboard.json')
root = Tk()
root.title("CopyNotes")
root.geometry()
mynotes = {
"B1": ["button1label","button1note"],
"B2":["button2label","button2note"],
"B3":["button3label","button3note"]
}
def cp_to_cb_and_db(note, key):
root.clipboard_append(note[key][1])
print('[+] Adding note: {} to clipboard.'.format(note))
db.insert({key: note})
for key in mynotes:
btnz = Button(
root,
text=mynotes[key][0],
font="Helvetica 10 bold",
bg="silver",
command=cp_to_cb_and_db(mynotes, key),
height=2,
width=13).pack(side=TOP, fill=BOTH, expand=YES)
root.mainloop()