【问题标题】:Accessing dynamically created tkinter widgets访问动态创建的 tkinter 小部件
【发布时间】:2018-10-31 10:09:28
【问题描述】:

我正在尝试制作一个 GUI,其中 tkinter 条目的数量由用户决定。

我的代码:

from tkinter import*

root = Tk()

def createEntries(quantity):
    for num in range(quantity):
        usrInput = Entry(root, text = num)
        usrInput.pack()

createEntries(10)

root.mainloop()

此代码基于我找到的this tutorial

for num in range(10):
    btn = tkinter.button(window, text=num)
    btn.pack(side=tkinter.LEFT)

问题是我只能访问最新创建的小部件中的输入,因为它们都具有相同的名称。有没有办法动态创建具有唯一名称的小部件?

任何建议将不胜感激

【问题讨论】:

    标签: python tkinter widget


    【解决方案1】:

    解决方案是将小部件存储在数据结构中,例如列表或字典。例如:

    entries = []
    for num in range(quantity):
        usrInput = Entry(root, text = num)
        usrInput.pack()
        entries.append(usrInput)
    

    稍后,您可以遍历此列表以获取值:

    for entry in entries:
        value = entry.get()
        print("value: {}".format(value))
    

    当然,您还可以按编号访问特定条目:

    print("first item: {}".format(entries[0].get()))
    

    【讨论】:

      【解决方案2】:

      使用以下代码,您可以根据 Var“字段”调整按钮和条目的数量。希望对你有帮助

      from tkinter import *
      fields = 'Last Name', 'First Name', 'Job', 'Country'
      
      def fetch(entries):
         for entry in entries:
            field = entry[0]
            text  = entry[1].get()
            print('%s: "%s"' % (field, text))
      
      def makeform(root, fields):
         entries = []
         for field in fields:
            row = Frame(root)
            lab = Label(row, width=15, text=field, anchor='w')
            ent = Entry(row)
            row.pack(side=TOP, fill=X, padx=5, pady=5)
            lab.pack(side=LEFT)
            ent.pack(side=RIGHT, expand=YES, fill=X)
            entries.append((field, ent))
         return entries
      
      if __name__ == '__main__':
         root = Tk()
         ents = makeform(root, fields)
         root.bind('<Return>', (lambda event, e=ents: fetch(e)))
         b1 = Button(root, text='Show',
                command=(lambda e=ents: fetch(e)))
         b1.pack(side=LEFT, padx=5, pady=5)
         b2 = Button(root, text='Quit', command=root.quit)
         b2.pack(side=LEFT, padx=5, pady=5)
         root.mainloop()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-11
        • 2021-04-12
        • 2017-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多