如何在字典中存储 tkinter 按钮小部件?

我的程序的两个目标: #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()

所以要明确一点,我要解决的问题是按钮命令无法正常工作。第一次按下任何按钮时,它会复制“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)


UYOU
浏览 153回答 1
1回答

温温酱

您不需要使用 json,因为您使用的不是 JSON 对象而是 Python 字典。这是您重构的代码以使用 3 个按钮填充应用程序;[更新] 尽管您需要完全重构代码,因为您的for循环会立即用字典中的所有内容填充剪贴板。from tkinter import *from tinydb import TinyDB, Querydb = 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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python