第6讲,Listbox 列表框控件

在与用户交互的过程成中,如果需要用户自己做出选择,可以使用列表框控件,下面的程序,我将创建一个应用,界面入下图所示
tkinter Listbox

整个界面分为3部分

  1. 红色区域,列表框控件,展示给用户4个选项
  2. 蓝色区域,显示所选按钮,点击该按钮,在绿色区域显示所选的选线
  3. 绿色区域,显示用户选择的列表框选项

程序如下

import tkinter as tk

window = tk.Tk()
window.title('列表框')          # 设置窗口的标题
window.geometry('200x240')     # 设置窗口的大小

list_itmes = tk.StringVar()
list_itmes.set(('python', 'c++', 'java', 'php'))         # 设置可选项

# 创建列表框
lb = tk.Listbox(window, listvariable=list_itmes)
lb.pack()

no_select = '没有选中任何选项'

def click_button():
    """
    当按钮被点击时执行该函数
    :return:
    """
    select = lb.curselection()
    print(len(select))
    if len(select) == 0:
        label_text.set(no_select)
    else:
        text = lb.get(select)
        label_text.set('你选择了{text}'.format(text=text))

# 创建button
button = tk.Button(window,
    text='显示所选',             # 显示在按钮上的文字
    width=15, height=2,
    command=click_button)     # 点击按钮时执行的函数
button.pack()                 # 将按钮锁定在窗口上

# 创建label用于显示所选择的列表框选项
label_text = tk.StringVar()    #创建变量
label_text.set(no_select)
label = tk.Label(window,
    width=15, height=2,        # 标签长宽
    textvariable=label_text    # label控件将显示label_text的值
    )
label.pack()               # 将标签固定在窗口上

window.mainloop()             # 启动窗口

代码很多,需要逐个部分进行讲解

1. 列表框初始化

list_itmes = tk.StringVar()
list_itmes.set(('python', 'c++', 'java', 'php'))         # 设置可选项

# 创建列表框
lb = tk.Listbox(window, listvariable=list_itmes)
lb.pack()

在创建列表框时,设置listvariable参数,list_itmes变量里存储的是列表框里的可选项

2. 获取列表框里别选中的内容

def click_button():
    """
    当按钮被点击时执行该函数
    :return:
    """
    select = lb.curselection()
    print(len(select))
    if len(select) == 0:
        label_text.set(no_select)
    else:
        text = lb.get(select)
        label_text.set('你选择了{text}'.format(text=text))

curselection()方法获取被选中的可选项的索引,以元组的形式返回,这里我先判断选中的内容是否为空,如果有选项被选中,则使用get方法获取选中的内容

3. 让label标签动态变化

label_text = tk.StringVar()    #创建变量
label_text.set(no_select)
label = tk.Label(window,
    width=15, height=2,        # 标签长宽
    textvariable=label_text    # label控件将显示label_text的值
    )

想要让label标签控件的文字内容动态变化,需要设置textvariable 参数,这里已经第二次用到tk.StringVar()创建对象,将textvariable设置为label_text,那么此后,你对label_text的值的修改,都将直接影响到标签上的文字显示。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案