欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python GUI开发之Tkinter基础篇5:Listbox、Scrollbar组件

程序员文章站 2022-05-28 22:22:08
...

Python GUI开发之Tkinter基础篇5:Listbox、Scrollbar组件

一、前言

上一节我们学习了Radiobutton、Checkbutton组件,适用于少量的需要展示在列表中的选项,如果选项非常多,就推荐使用Listbox组件,不仅美观,且不会出现因按钮过多导致用户界面不够存放的情况。本文向大家介绍Listbox、Scrollbar组件,先用Listbox创建一个列表选项,再用Scrollbar为Listbox安装一个垂直滚动条。

二、Listbox使用实例

1、先创建一个空列表:

from tkinter import *
root = Tk()
root.title("你最喜欢的城市?")
root.geometry("255x255")
lb = Listbox(root)
lb.pack()

2、往列表中添加选项

for item in ["北京","上海","广州","深圳","长沙","武汉","郑州","重庆","成都","西安","杭州","南京","宁波","无锡"]:
    lb.insert(END,item)

3、设置一个删除按钮,按下即可删除选中的城市

thebutton = Button(root,text = "删除",command = lambda x=lb:x.delete(ACTIVE))
thebutton.pack()
  • ACTIVE表示当前选中项。

4、将Listbox绑定一个事件,用以获取选中选项,并设置一个Label将该选项显示出来

var=StringVar()
var.set("你喜欢的城市在这!")
label=Label(root,textvariable=var).pack()

def search(event):
    var.set(lb.get(lb.curselection()))
lb.bind('<ButtonRelease-1>',search)
lb.pack()
ButtonRelease为鼠标按键释放后触发,在List中鼠标选中选项,松手后触发该事件。

5、完整代码

from tkinter import *
root = Tk()
root.title("你最喜欢的城市?")
root.geometry("255x255")
lb = Listbox(root)
lb.pack()
for item in ["北京","上海","广州","深圳","长沙","武汉","郑州","重庆","成都","西安","杭州","南京","宁波","无锡"]:
    lb.insert(END,item)
thebutton = Button(root,text = "删除",command = lambda x=lb:x.delete(ACTIVE))
thebutton.pack()
var=StringVar()
var.set("你喜欢的城市在这!")
label=Label(root,textvariable=var).pack()

def search(event):
    var.set(lb.get(lb.curselection()))
lb.bind('<ButtonRelease-1>',search)
lb.pack()
mainloop()

6、运行
Python GUI开发之Tkinter基础篇5:Listbox、Scrollbar组件
有小伙伴可能注意到了,列表中“西安”以后的城市没有显示出来,我们通过鼠标按住往下拉,或者鼠标滚动,也是可以显示出来的,但这样不够美观,也容易被用户忽略。那有没有办法解决这个问题呢?

答案是有的,两个方法:

1、为Listbox修改高度height选项。
2、为Listbox添加垂直滚动条。

我们来试试修改高度为14.

lb = Listbox(root,height = 14)

结果如下:
Python GUI开发之Tkinter基础篇5:Listbox、Scrollbar组件
修改height选项虽然可以解决问题,但如果列表中选项足够多,例如超过50个,用这种办法就会导致界面很不美观。这时我们就需要添加滚动条,下面向大家介绍滚动条Scrollbar组件的用法。

三、Scrollbar使用实例

虽然滚动条是作为一个独立的组件存在,但它几乎都是与其他组件配合使用的,下面来演示如何向Listbox添加垂直滚动条。

在Listbox添加垂直滚动条,需要做两步:

1、设置Listbox组件的yscrollcommand选项为Scrollbar组件的set()方法。
2、设置Scrollbar组件的command选项为Listbox组件的yview()方法。

代码如下:

from tkinter import *

root = Tk()
root.title("你最喜欢的城市?")
root.geometry("255x255")
scrollbar = Scrollbar(root)
scrollbar.pack(side = RIGHT,fill = Y)
lb = Listbox(root,yscrollcommand = scrollbar.set)
lb.pack()
for item in ["北京","上海","广州","深圳","长沙","武汉","郑州","重庆","成都","西安","杭州","南京","宁波","无锡","昆明","青岛","海南","天津","厦门","兰州","合肥","南昌","徐州"]:
    lb.insert(END,item)
thebutton = Button(root,text = "删除",command = lambda x=lb:x.delete(ACTIVE))
thebutton.pack()
var = StringVar()
var.set("你喜欢的城市在这!")
Label(root,textvariable=var).pack()

def search(event):
    var.set(lb.get(lb.curselection()))
lb.bind('<ButtonRelease-1>',search)

scrollbar.config(command = lb.yview)
mainloop()

注意:在本示例中,Listbox中的scrollbar.set和scrollbar中的lb.yview后面都是没有括号的,不要写错了。

分析:事实上这是一个互联互通的过程,当用户操作滚动条时,滚动条响应滚动并同时通过Listbox组件的yview()方法滚动列表框里的内容;同样的,当列表框中可视范围发生改变的时候,Listbox组件通过调用Scrollbar组件的set()方法设置滚动条的最新位置。

运行
Python GUI开发之Tkinter基础篇5:Listbox、Scrollbar组件
滑动滚动条后,选中"杭州",显示如下:
Python GUI开发之Tkinter基础篇5:Listbox、Scrollbar组件

四、结语

如您在使用过程中有任何问题,请加QQ群进一步交流。

QQ交流群:906015840 (备注:物联网项目交流)。

获取资料:微信扫描下方二维码,关注公众号:一个物联网项目的前世今生,回复tkinter即可。

静晨出品:静之所想,晨之所计
Python GUI开发之Tkinter基础篇5:Listbox、Scrollbar组件

相关标签: tkinter