python - python 3.7 tkinter 的空列表框返回值
问题描述
为什么这个列表框不返回我的选择?我添加了带有按钮的 returnSelected() 函数,认为它需要被触发。我的目标是创建一个尽可能简单的功能,用户可以选择精简列表,我显然不了解 tkinter 流程。
import tkinter
def listboxinput3():
# <ListboxSelect> callback function and current selection
def cb(event):
label['text'] = str(event) + '\n' + str(lb.curselection())
def returnSelected():
myselection = [my_list[k] for k in lb.curselection()]
print(myselection )
root = tkinter.Tk()
root.title('Parameter Selection')
root.geometry('200x600')
my_list = dir(tkinter)
var = tkinter.StringVar(value=my_list)
label = tkinter.Label(root)
label.grid()
btnGet = tkinter.Button(root,text="Get Selection",command=returnSelected)
btnGet.grid()
lb = tkinter.Listbox(root, listvariable=var, selectmode='extended')
lb.grid()
lb.bind('<<ListboxSelect>>', cb)
#tkinter.Button(root, text="Show Selected", command=returnSelected).pack()
selected_text_list = [lb.get(i) for i in lb.curselection()]
root.mainloop()
return selected_text_list
selected_text_list = listboxinput3()
谢谢
解决方案
看来你不知道 GUI 是如何工作的。您selected_text_list
在mainloop()
启动程序、显示窗口、点击、运行cb
等returnSelected
之前创建此列表 - 因此您甚至在看到窗口和选择项目之前就创建了此列表。
您必须在函数内部创建它,cb
或者returnSelected
在选择项目后执行它。它需要global selected_text_list
将其分配给外部变量,因为button
无法获取它并将其分配给外部变量。
import tkinter
def listboxinput3():
# <ListboxSelect> callback function and current selection
def cb(event):
label['text'] = str(event) + '\n' + str(lb.curselection())
def returnSelected():
global selected_text_list
selected_text_list = [my_list[k] for k in lb.curselection()]
root = tkinter.Tk()
root.title('Parameter Selection')
root.geometry('200x600')
my_list = dir(tkinter)
var = tkinter.StringVar(value=my_list)
label = tkinter.Label(root)
label.grid()
btnGet = tkinter.Button(root, text="Get Selection", command=returnSelected)
btnGet.grid()
lb = tkinter.Listbox(root, listvariable=var, selectmode='extended')
lb.grid()
lb.bind('<<ListboxSelect>>', cb)
#tkinter.Button(root, text="Show Selected", command=returnSelected).pack()
# selected_text_list = [lb.get(i) for i in lb.curselection()] # useless - it is executed before you even see window
# display window, run function assigned to button when you click, etc.
root.mainloop()
return selected_text_list
selected_text_list = listboxinput3()
print(selected_text_list)
推荐阅读
- java - 禁止自定义 FreeMarker 指令的所有空格和新行
- postgresql - 如何接当前分类的二级分类
- java - Session.flush() 导致 org.hibernate.StaleStateException:批量更新从更新返回了意外的行数:1 实际行数:0 预期:1
- php - Js Validator Plugin远程规则用于在Ajax调用后不刷新页面不工作的唯一值检查
- sql - 月度统计。ORA-01722: 无效号码
- java - 如何从 actionEventListner 通知 Main thead
- php - PHP 返回除以零
- php - 如何循环卡?(包含卡片中的所有元素)
- python - 当结果达到阈值时,如何控制 odeint 停止积分?
- javascript - Highcharts 设置 xAxis 值从上午 12 点开始到晚上 11 点结束