为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

UYOU 2021-08-14 21:16:12
我的程序的两个目标: #1 单击按钮后将笔记复制到剪贴板;和 #2 通过重新启动程序使按钮小部件保持不变。(这篇文章将只关注第 1 个目标)按钮按预期填充,但命令无法正常工作(尽管没有错误)。我尝试过其他剪贴板模块,例如 pyperclip,但没有成功。抱歉,如果这很难理解,我上周才开始学习 Python 作为我的第一门编程语言。我想知道如何让按钮将其相应的注释复制到剪贴板。from tkinter import *import jsonroot = 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)
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

您不需要使用 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()


查看完整回答
反对 回复 2021-08-14
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信