我使用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()