首页 > 解决方案 > 可以通过单击按钮来创建列表框

问题描述

我将创建多个条目框供用户输入,然后单击将所有条目值存储到数组中的按钮,条目将被清除,然后存储的用户可以存储另一组条目值。

所以这个按钮将执行 2 个功能: 1:将值存储到我的数组 2:使用来自第一个数组的值创建第一个列表框

结果,我可以得到多组数组,并且每组数组都有自己的列表框。

我没有找到相关的指南,或者“动态创建列表框”对我没有帮助。如果可行,可以分享示例。

标签: python-3.xtkinterlistbox

解决方案


欢迎来到 Stack Overflow 社区。

据我了解您的问题,我已经尝试过

from tkinter import *

root = Tk()

def saveClear():
    global entry_list
    listbox = Listbox(root)
    for entry in entry_list:
        listbox.insert(END, entry.get())
        entry.set('')
    listbox.pack(padx = 10, pady = 10)
    
entry_list = []
for _ in range(5):
    ent_var = StringVar()
    ent = Entry(root, textvariable = ent_var)
    entry_list.append(ent_var)
    ent.pack(padx = 10, pady = 10)

but = Button(root, text = 'Save and Clear', command = saveClear)
but.pack(padx = 10, pady = 10)

root.mainloop()

更新:为了从 a 中获取值ListBox(),您需要使用listvariable带有目标的属性Variable()来将值存储为元组并使用该.get()方法来获取相同的值。

这是更新的代码:

from tkinter import *

root = Tk()

def retrieve(index):    
    global values
    if index == 'all':
        for value in values:
            print(value.get())
    else:
        print(values[index].get())

values = []
def saveClear():
    global entry_list, values
    list_var = Variable()
    listbox = Listbox(root, listvariable = list_var)
    for entry in entry_list:
        listbox.insert(END, entry.get())
        entry.set('')
    values.append(list_var)
    listbox.pack(padx = 10, pady = 10)

entry_list = []
for _ in range(5):
    ent_var = StringVar()
    ent = Entry(root, textvariable = ent_var)
    entry_list.append(ent_var)
    ent.pack(padx = 10, pady = 10)

but = Button(root, text = 'Save and Clear', command = saveClear)
but.pack(padx = 10, pady = 10)

root.mainloop()
retrieve('all') #OR specify the index that you wish to retrieve

这里retrieve()是在结束后调用的mainloop(),即在主循环终止后执行,但您可以根据需要在代码中使用该函数。

希望它有所帮助。干杯!


推荐阅读