pythonscrollbar布局_简单的python列表框+滚动条组合演示(实用性较强)-设置滚动条样式...

该示例是一个简单的滚动列表框演示,用到两个组件,Listbox(列表框)和Scrollbar(滚动条)。最终效果是实现一个列表展示界面,界面包括水平和垂直滚动条,内容比较简单。效果如下:

效果图

全部代码如下:from tkinter import *

class ScrolledList(Frame):

def __init__(self,options,parent=None):

Frame.__init__(self,parent)

self.pack(expand=YES,fill=BOTH)

self.makeWidgets(options)

def handleList(self,options):

index=self.listbox.curselection() # 得到列表框中被选中项的索引值

label=self.listbox.get(index) # 按照索引来提取被选中项的内容

self.runCommand(label)

def makeWidgets(self,options):

ysbar=Scrollbar(self)

xsbar=Scrollbar(self)

list=Listbox(self,relief=SUNKEN,bg='white',font=('courier',12))

ysbar.config(command=list.yview) # list.yview是一个内置的列表框方法,可以按照比例调节列表框的显示

xsbar.config(command=list.xview,orient='horizontal') # 水平滚动条需要设置orient选项,否则默认是垂直显示(上下调节,而非我们习惯的左右调节)

list.config(yscrollcommand=ysbar.set) # sbar.set也是个内置滚动条函数,它会按比例调节滚动条,跟ysbar.config语句一起用会自动将两个组件相互同步(移动两者任何一个,另一个会随之移动)

list.config(xscrollcommand=xsbar.set,relief=SUNKEN)

ysbar.pack(side=RIGHT,fill=Y)

xsbar.pack(side=BOTTOM,fill=X)

list.pack(side=LEFT,expand=YES,fill=BOTH)

pos=0

for label in options:

list.insert(pos,label) # pos是label的索引,从0开始,可以用END或者active分别代表末尾和被选中的列表项

pos+=1

list.config(selectmode=BROWSE,setgrid=1)

list.bind('',self.handleList)

self.listbox=list

def runCommand(self,selection):

print('You selected:',selection)

水平缩小界面if __name__=="__main__":

options=(('Longlonglist-%s'%x) for x in range(50)) # 为了显示出水平滚动条的效果,让显示内容加长一点

ScrolledList(options).mainloop()

双击列表项

注:列表框不具备类似按钮一样的command选项来设置回调函数。

列表框的selectmode选项支持四种模式,SINGLE,BROWSE,MULTIPLE和EXTENDED,默认是BROWSE,前两种是单选模式,后两种允许选择多个条目。BROWSE类似SINGLE,但允许拖拉选项。MULTIPLE模式下,单击一个条目会触发其状态而不影响其它选中条目。EXTENDED模式允许多选,方式类似Windows文件浏览器的GUI,单击可以选中一个条目,按下Ctrl键可以选中多个条目,按下Shift键则可选中范围内的多个条目。

tkinter中每一个可滚动的对象如Listbox,Entry,Text和Canvas都可以通过内置的yview和xview方法来实现垂直或者水平滚动条的效果。yscrollcommand和xscrollcommand选项则用于激活相关滚动条的回调函数。二者同时使用可以实现滚动条和列表框同步的效果(即拖动滚动条,列表框会跟着动,反之亦然)。

由于在缩小窗口时,最后部署的组件会最先被挤掉,而滚动条对于导航和浏览列表内容是不可或缺的,因此,需要先部署滚动条后部署列表框。这样,当窗口缩小无法全部容纳时,滚动条将最后消失。我们一般并不希望滚动条随着窗口扩大而扩大,因此滚动条一般设置fill=Y或者fill=X,只达到垂直或者水平扩展的目的,而不会设置为fill=BOTH。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值