用户界面- Python和Listbox (GUI)



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

listbox.bind('<ButtonRelease-1>', get_list)
def get_list(event):
    index = listbox.curselection()[0]
    seltext = listbox.get(index)
    print(seltext)

正确地打印出所选内容。但是,我无法从函数中获取"seltext"并能够在稍后的代码中使用它。有人推荐get_list(event),但我不知道事件从何而来。谢谢你的帮助

编辑:

   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)

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

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

相关内容

  • 没有找到相关文章

最新更新