2013-04-08 23 views
0

现在我制作了一个程序,它可以通过点击一个按钮来激活。现在说我有一个名为:Tkinter:制作一个可以改变选择变量的列表框

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

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

回答

2

您可以创建一个字典,您的替代值(例如映射的实际列表框的值:。{"stuff": 1, "morestuff": 2}接下来,<<ListboxSelect>>创建绑定在从调用该函数结合,得到当前选择的项目,用它来查找另一个值,并将该值存储在变量

下面是一个例子:

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

如果你只是想将变量设置为所选项目的索引,你并不需要的词典。 。从你的问题来看,你是否想要选择什么样的指数还是不清楚一些与列表框项目相关的不同值。

+0

是否可以在类的外部定义on_listbox_select? – madprogramer 2013-04-09 04:44:26

+0

@madprogramer:当然。 Tkinter没有类的概念,你只需要给它一个可调用的参考。你如何定义它完全取决于你。 – 2013-04-09 10:47:41