Python和列表框(GUI)

时间:2016-08-15 16:42:48

标签: python user-interface tkinter

我使用tkinter构建了一个列表框 现在,我希望用户单击列表框中的项目,该项目使用选择创建变量。

listbox.bind('<ButtonRelease-1>', get_list)

def get_list(event):
    index = listbox.curselection()[0]
    seltext = listbox.get(index)
    print(seltext)

这样可以正确打印出选择。但是,我无法从函数中获取“seltext”,并且稍后可以在代码中使用它。有人推荐了get_list(事件),但我不知道事件来自哪里。感谢帮助

编辑:

   for f in filename:
                with open(f) as file_selection:
                    for line in file_selection:
                        Man_list = (line.split(',')[1])

                        listbox.insert(END, Man_list)

                file_selection.close()



        def get_list(event):
            global seltext
            # get selected line index
            index = listbox.curselection()[0]
            # get th e line's text
            global seltext
            seltext = listbox.get(index)



        # left mouse click on a list item to display selection
        listbox.bind('<ButtonRelease-1>', get_list)

1 个答案:

答案 0 :(得分:1)

这是一个关于如何构建代码的问题。事件处理程序不是为返回值而构建的。使用全局变量或类属性来检索和存储值。可以像这样设置全局变量:

from Tkinter import *

def get_list(event):
    global seltext
    index = listbox.curselection()[0]
    seltext = listbox.get(index)

root = Tk()
listbox = Listbox(root)
listbox.pack()
listbox.bind('<ButtonRelease-1>', get_list)

for item in ["one", "two", "three", "four"]:
    listbox.insert(END, item)

seltext = None

root.mainloop()

但是类属性是更好的选择。您的Tkinter应用程序应该是模块化的,以确保一切都很容易访问,并防止这样的问题。您可以将变量设置为self,然后以这种方式访问​​它们。

from Tkinter import *

class Application(Tk):
    def __init__(self):
        Tk.__init__(self)
        listbox = Listbox(self)
        listbox.pack()
        listbox.bind('<ButtonRelease-1>', self.get_list)

        for item in ["one", "two", "three", "four"]:
            listbox.insert(END, item)

        self.listbox = listbox # make listbox a class property so it
                               # can be accessed anywhere within the class

    def get_list(self, event):
        index = self.listbox.curselection()[0]
        self.seltext = self.listbox.get(index) 

if __name__ == '__main__':
    app = Application()
    app.mainloop()