鱼c笔记——Python的GUI编程(五):Tkinter组件Listbox、Scrollbar和Scale

Listbox组件,用列表框的形式显示出选项,并且支持滚动条操作。所以更适用于提供大量选项。

 
  1. from tkinter import *

  2.  
  3. master = Tk()

  4.  
  5. theLB = Listbox(master)

  6. theLB.pack()

  7.  
  8. #theLB.insert(0, '') #向Listbox里添加选项,下标从零开始。最后可以用END

  9. for item in ['张三', '李四', '王五']:

  10. theLB.insert(END, item) #END表示最后一个。里面什么都没有时,END是0;插入一个后,END是1

  11.  
  12. '''

  13. theLB.delete(0, END)

  14. #删除Listbox里所有的选项。删除操作有两个参数:起始位置和结束位置

  15. #如果只有一个参数,就指定删除参数对应的选项

  16. '''

  17.  
  18. #添加按钮组件选中哪个按下删除哪个

  19. theButton = Button(master, text='删除它', \

  20. command=lambda x=theLB:x.delete(ACTIVE)) #ACTIVE表示当前选中的值

  21. theButton.pack()

  22.  
  23. mainloop()

Listbox组件根据selectmode选项提供了四种不同的选择模式:SINGLE(单选)、BROWSE(也是单选,但是拖动鼠标或通过方向键可以直接改变选项)、MUTIPLE(多选)和EXTENDED(也是多选,但需要同时按住Shift键或Ctrl键或拖拽鼠标实现)。默认是BROWSE。

Listbox组件默认最多只能显示10个项目,如果有11个项目怎么解决?

可以通过在Listbox内滑动鼠标滚轮使最后一个现身,但这样很容易被忽略。

有两个方法可以避免:

①修改height选项。height选项是用来设置Listbox显示的行数(不是像素),其默认值是10

但是如果要显示项目过多,比如说1000个,修改height就不太合适了,因为总不能显示1000行

②可以为Listbox组件添加滚动条。

Scrollbar滚动条组件:

滚动条组件虽然是一个独立的组件,但几乎都是与其他组件一起配合使用。

为了在某个组件上安装垂直滚动条,你需要做两件事:

1.设置该组件的yscrollcommand选项为Scrollbar组件的set()方法

2.设置Scrollbar组件的command选项为该组件的yview()方法

下面是一个在Listbox里添加滚动条的例子:

 
  1. from tkinter import *

  2.  
  3. root = Tk()

  4.  
  5. sb = Scrollbar(root)

  6. sb.pack(side=RIGHT, fill=Y) #把滚动条加到右边去,填充整个y轴

  7.  
  8. lb = Listbox(root, yscrollcommand=sb.set)

  9. #在Listbox里滑动鼠标滚轮时调用set方法,同时修改滚动条的位置

  10.  
  11. for i in range(1000):

  12. lb.insert(END, i)

  13. lb.pack(side=LEFT, fill=BOTH)

  14.  
  15. #要与滚动条互通互连,要设置滚动条的command选项

  16. sb.config(command=lb.yview) #config方法设置某个选项的值

  17. #yview方法是Listbox里的默认方法,方法已经设置好怎么显示垂直滚动对应的内容变化

  18. #拖动垂直滚动条时调用yview

  19.  
  20. mainloop()

既然说到了滚动条,就继续来说说和滚动条组件很相似的一个组件Scale组件。

Scale组件主要通过滑块来表示某个范围内的一个数字。可以设置选项范围和分辨率(分辨率指的是步长,也就是精度)

 
  1. from tkinter import *

  2.  
  3. #当我们希望用户输入某个范围内的数字的时候,可能会使用Entry组件,但是Entry组件并不能限制一个范围

  4. root = Tk()

  5.  
  6. s1 = Scale(root, from_=0, to=42) #有两个参数from和to,但是from参数和Python的关键字冲突了,所以加个下横线

  7. s1.pack()

  8.  
  9. s2 = Scale(root, from_=0, to=200, orient=HORIZONTAL) #默认Scale是垂直的,可以修改orient参数成水平的

  10. s2.pack()

  11.  
  12. #获取滑块当前位置使用的是get方法

  13. def show():

  14. print(s1.get(), s2.get())

  15.  
  16. Button(root, text='获取位置', command=show).pack()

  17.  
  18. mainloop()

可以通过设置选项tickinterval和resolution改变步长和精度:

 
  1. from tkinter import *

  2.  
  3. root = Tk()

  4.  
  5. #tickinterval=5每5个步长显示刻度

  6. #resolution设置每次移动多少个长度,等于5的话,每次改变只能改变5

  7. #设置length长度,不然都堆在一起了

  8. s1 = Scale(root, from_=0, to=42, tickinterval=5, resolution=5, length=200).pack()

  9. s2 = Scale(root, from_=0, to=200, tickinterval=10, orient=HORIZONTAL, length=600).pack()

  10.  
  11. mainloop()

猜你喜欢

转载自blog.csdn.net/weixin_41738417/article/details/81605608
今日推荐