【问题标题】:Dynamic dictionary entry tkinter动态字典条目 tkinter
【发布时间】:2023-03-22 11:37:01
【问题描述】:

我正在尝试在 tkinter 中制作一个基本的 GUI,但我希望它是动态的。 最终目标是让这个 GUI 填充一个嵌套字典,并且用户可以根据需要添加任意数量的项目。 我设法用一些简单(而且相当重复)的代码输入了一个完整的 single 字典:

例如: 编辑

from Tkinter import *

top = Tk()
L1 = Label(top, text="User Name")
L1.pack( side = LEFT)
E1 = Entry(top, bd =5)
E1.pack(side = RIGHT)

top.mainloop()

现在我正在寻找一种方式,让 GUI 有一个按钮(如 + 号),允许用户在每次按下按钮时打开另一个单个或一组条目并相应地填充字典。 有什么想法吗?

【问题讨论】:

  • 请提供minimal reproducible example。上面的代码只是较大代码的一小部分,有些相关的部分,不是独立的,也不是问题中唯一孤立的部分。
  • 编辑为一个简单、可运行的示例。

标签: python python-2.7 tkinter


【解决方案1】:

您基本上想要一个标签和条目对象。您可以在 listdict 等集合类型中收集这些对象。

下面的示例使用list

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk


class LabelEntry(tk.Frame):
    def __init__(self, master, text="User Name", *args, **kwargs):
        tk.Frame.__init__(self, master, *args, **kwargs)
        self._label = tk.Label(self, text=text)
        self._entry = tk.Entry(self, bd=5)
        self._label.pack(side='left', fill='both', expand=True)
        self._entry.pack(side='left', fill='both', expand=True)


def add_a_le(master, widgets_list):
    widgets_list.append(LabelEntry(master))
    widgets_list[-1].pack()


def main():
    root = tk.Tk()
    my_label_entries = list()
    add_btn = tk.Button(root, text="Add")
    add_btn['command'] = lambda m=root, ws=my_label_entries: add_a_le(m, ws)
    add_btn.pack(side='bottom')
    tk.mainloop()


if __name__ == '__main__':
    main()

【讨论】:

  • 好的,还有一件事,我该如何从这些条目中获取值(假设我当然需要知道它们来自哪个字段)?
  • @Rafi my_label_entries[2].get() 将第三个条目的值作为字符串返回在它被调用时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多