【问题标题】:Possible to create a listbox by click on a button可以通过单击按钮来创建列表框
【发布时间】:2020-08-26 10:51:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您必须将值附加到文本文件或数据库中以存储它,否则每次关闭应用程序后,它都会丢失
  • 请编辑您的问题以包含您尝试过的一些代码。

标签: python-3.x tkinter listbox


【解决方案1】:

欢迎来到 Stack Overflow 社区。​​p>

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

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()

更新:为了从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()结束后调用的,即在mainloop终止后执行,但你可以根据需要在代码中使用这个函数。

希望它有所帮助。干杯!

【讨论】:

  • 谢谢你,我不知道如何开始......我尝试继续编写代码,并希望打印出每个列表框中的值。它正在打印出大量的 [ 或 [ 用于第二次保存并退出。代码:pastebin.com/p0pr40fL
  • @SCH 我刚刚意识到您无法通过我之前提供的建议来实现您正在寻找的东西,但我已经更正并更新了我的答案,我希望它可以按您的预期工作到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 2012-08-29
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 2013-08-22
相关资源
最近更新 更多