Tkinter ListBox 虚拟绑定应用于单选
当Listbox执行选取操作时会产生<<ListboxSelect>>
虚拟事件,可以由此设置事件处理程序。
示例1
当选择Listbox中的项目时,可以在上方列出所选的项目。
from tkinter import *
def itemSelected(event): # List the selected single item
obj = event.widget # Get the object of the event, i.e. the Listbox control object
index = obj.curselection() # Get Index
print(index)
print(type(obj.get(index)))
print(obj.get(index))
var.set(obj.get(index)) # Set label content
fruits = [
"Banana","Watermelon","Pineapple",
"Orange","Grapes","Mango"
]
root = Tk()
root.title("apidemos.com") # 窗口标题
root.geometry("300x250") # 窗口宽300高210
var = StringVar()
# var.set("cxq123")
lab = Label(root,text="",textvariable=var)
lab.pack(pady=5)
lb = Listbox(root)
for fruit in fruits: # 建立水果项目
lb.insert(END,fruit)
lb.bind("<<ListboxSelect>>",itemSelected) # 绑定
lb.pack(pady=5)
root.mainloop()
输出:
读者应留意第22行,当单击Listbox中选项时会产生虚拟的<<ListboxSelect>>
事件,此时可以触发itmeChanged( )方法处理此事件。程序第3~6行将所选择的内容在上方的标签中显示。第4~6行也是新的概念,在第4行先取得事件对象obj,此例这个对象就是Listbox对象,然后利用这个obj对象取得所选的项目索引,再由索引取得所选的项目。当然也可以省略第4行,直接使用原先的Listbox对象lb也可以
from tkinter import *
def itemSelected(event): # 列出所选单一项目
index = lb.curselection() # 取得索引
var.set(lb.get(index)) # 设置标签内容
fruits = [
"Banana","Watermelon","Pineapple",
"Orange","Grapes","Mango"
]
root = Tk()
root.title("apidemos.com") # 窗口标题
root.geometry("300x250") # 窗口宽300高210
var = StringVar()
# var.set("cxq123")
lab = Label(root,text="",textvariable=var,bg="yellow")
lab.pack(pady=5)
lb = Listbox(root)
for fruit in fruits: # 建立水果项目
lb.insert(END,fruit)
lb.bind("<<ListboxSelect>>",itemSelected) # 绑定
lb.pack(pady=5)
root.mainloop()
输出:
早期或网络上一些人不懂虚拟绑定的概念,在设计这类程序时,由于单击是被tkinter绑定选取Listbox的项目,就用双击<Double-Button-1>
方式处理,将所选项目放在标签上。
示例2
使用<Double-Button-1>
取代虚拟事件<ListboxSelect>
。
from tkinter import *
def itemSelected(event): # 列出所选单一项目
obj = event.widget # 取得事件的对象,即Listbox控件对象
index = obj.curselection() # 取得索引
print(index)
print(type(obj.get(index)))
print(obj.get(index))
var.set(obj.get(index)) # 设置标签内容
fruits = [
"Banana","Watermelon","Pineapple",
"Orange","Grapes","Mango"
]
root = Tk()
root.title("apidemos.com") # 窗口标题
root.geometry("300x250") # 窗口宽300高210
var = StringVar()
# var.set("cxq123")
lab = Label(root,text="",textvariable=var)
lab.pack(pady=5)
lb = Listbox(root)
for fruit in fruits: # 建立水果项目
lb.insert(END,fruit)
lb.bind("<Double-Button-1>",itemSelected) # 绑定
lb.pack(pady=5)
root.mainloop()
输出:
讲解这个程序的目的是告诉读者以前或网络上有人如此处理,当然建议读者使用示例1的方法,因为站在使用者的立场,当然期待单击即可选取和将所选的项目处理完成。