Tkinter ListBox 虚拟绑定应用于单选

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

输出:

Tkinter ListBox 虚拟绑定应用于单选

读者应留意第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 虚拟绑定应用于单选

早期或网络上一些人不懂虚拟绑定的概念,在设计这类程序时,由于单击是被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()

输出:

Tkinter ListBox 虚拟绑定应用于单选

讲解这个程序的目的是告诉读者以前或网络上有人如此处理,当然建议读者使用示例1的方法,因为站在使用者的立场,当然期待单击即可选取和将所选的项目处理完成。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程