Tkinter:制作一个可以根据选择更改变量的列表框

时间:2013-04-08 19:07:04

标签: python variables listbox click tkinter

现在我制作了一个程序,只需点击一下按钮即可激活。现在说我有一个名为的列表框:

selection = Tkinter.Listbox(b_action)
selection.insert(1,"stuff")
selection.insert(2,"morestuff")
a = 0

每次选择列表框的不同部分时,如何运行该过程?例如,我首先点击“stuff”,然后点击“morestuff”。点击“stuff”将a设置为1,然后点击“morestuff”再次将a设置为0。

1 个答案:

答案 0 :(得分:3)

您可以创建一个字典,将实际列表框值与您的备用值相映射(例如:{"stuff": 1, "morestuff": 2}。接下来,在<<ListboxSelect>>上创建一个绑定。在该绑定调用的函数中,获取当前选中的item,使用它来查找其他值,并将该值存储在变量中。

以下是一个例子:

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.label = tk.Label(self)
        self.selection = tk.Listbox(self, width=40)

        self.label.pack(side="top", fill="x", expand=False)
        self.selection.pack(side="top", fill="both", expand=True)

        self.data = {"stuff": 1, "morestuff": 2}
        self.selection.insert("end", "stuff", "morestuff")

        self.selection.bind("<<ListboxSelect>>", self.on_listbox_select)

    def on_listbox_select(self, event):
        i = self.selection.curselection()[0]
        text = self.selection.get(i)
        self.label.configure(text="new value: %s (%s)" % (self.data[text], text))

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(side="top", fill="both", expand=True)
    root.mainloop()

如果您只想将变量设置为所选项目的索引,则不需要字典。从您的问题中不清楚您是否想要所选内容的索引,或者与列表框项目关联的某个不同值。