首页 > 解决方案 > 如何从 Tkinter 列表框中提取变量以在脚本的其他地方使用?

问题描述

所以我在 python 中有一个列表框 Tkinter 对象,它允许我选择多个项目,并打印出所选项目的索引。我想使用该索引来匹配脚本中的其他地方,例如,如果选择了项目 0、2、4,则运行这组代码或显示表的其他属性为 0、2、4 并排除项目 1 和3.

这是我的脚本:

Title = ["ABC","DEF","GHI","JKL","MNO"]

def select_title():
    print(title_list.curselection())
    root.destroy()

root = Tk()
title_list = Listbox(root, width = 100, selectmode = MULTIPLE)
i = 0
while i < len(Title):
    title_list.insert(END, Title[i])
    i += 1
title_list.pack()

my_button = Button(root, text="Select", command=select_title)
my_button.pack()

root.mainloop()

当我运行它时,我得到了这个: 在此处输入图像描述

如果我选择“ABC”、“GHI”和“MNO”(索引为 0、2、4)并按下选择按钮,我会打印出以下输出:

(0, 2, 4)

我想将这些用于 list = [0, 2, 4] ,我可以在其他地方建立索引,这就是我无法弄清楚的问题。我尝试在其中放置一个返回函数,但在使用这种格式的 Tkinter 对象时似乎不起作用。我真的很感激任何人可以提供的任何见解。谢谢!

更新:如果我将代码调整为此,见下文,我仍然无法使用 def 之外的列表:

Title = ["ABC","DEF","GHI","JKL","MNO"]

def select_title():
    print(title_list.curselection())
    sel = title_list.curselection()
    lst = [_ for _ in sel]
    print(lst)
    root.destroy()

root = Tk()
title_list = Listbox(root, width = 100, selectmode = MULTIPLE)
i = 0
while i < len(Title):
    title_list.insert(END, Title[i])
    i += 1
title_list.pack()

my_button = Button(root, text="Select", command=select_title)
my_button.pack()

root.mainloop()

输出:

(0, 2, 4)
[0, 2, 4]

在 def 之外尝试:

lst

输出:

在此处输入图像描述

标签: pythontkinterlistboxtk

解决方案


感谢酷云的洞察。让它发挥作用至关重要。

以下是有效的脚本:

Title = ["ABC","DEF","GHI","JKL","MNO"]

def select_title():
    sel = title_list.curselection()
    global lst
    lst = [_ for _ in sel]
    root.destroy()

root = Tk()
title_list = Listbox(root, width = 100, selectmode = MULTIPLE)
i = 0
while i < len(Title):
    title_list.insert(END, Title[i])
    i += 1
title_list.pack()

my_button = Button(root, text="Select", command=select_title)
my_button.pack()

root.mainloop()

lst

推荐阅读