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