Tkinter编程应知应会(17)-滚动条Scrollbar(续)

前一篇文章提供了封装之后的ScrollbarEx类,大大简化了Scrollbar控件的使用。但是这种做法并不是Tkinter想定的用法,Tkinter想定的方式是和其他控件绑定在一起使用。首先看动作视频:

视频链接

首先构建一个标题为'ScrollListBox'的标签框控件。这个控件实在是太简单了,因此只是在这里顺便提一下。

 

frame1 = LabelFrame(root, text='ScrollListBox')frame1.grid(row=0, column=0, columnspan=1, sticky=W+E)

构建一个列表框控件。

 

 

# create a listbox for demo.lb = Listbox(frame1,             activestyle='dotbox',             height=8, width=20)
# add itemsfor i in range(0,20):    lb.insert(END, str(i))
# bind eventlb.bind('<>',        lambda e: label.config(text=str(lb.curselection())))lb.grid(row=0, column=0)
 

接下来是重点。代码首先构建一个垂直滚动条,并将command指定为Listbox的yview方法。参考前一篇说明的内容可以想象,yview方法中应该是对各种滚动通知的处理;在前一篇的处理中,当位置计算完成之后需要调用Scrollbar的set方法,这个set方法是通过代码指定给Listbox的yscrollcommand属性。

 

scroll_ly = Scrollbar(frame1, orient=VERTICAL, command=lb.yview)scroll_ly.grid(row=0, column=1, sticky=N+S)lb['yscrollcommand']=scroll_ly.set

同样的方法构建右侧的标签框:

 

frame2 = LabelFrame(root, text='ScrollText')frame2.grid(row=0, column=1, columnspan=1, sticky=W+E+N+S)

构建文本控件。需要注意的是wrap属性被指定为NONE。

 

 

# create text widget.text = Text(frame2, height = 10, width=20, wrap=NONE)text.grid(row=0, column=0)

分别构建垂直和水平两个方向滚动条:

 

scroll_ty = Scrollbar(frame2, orient=VERTICAL, command=text.yview)scroll_ty.grid(row=0, column=1, sticky=N+S)text['yscrollcommand']=scroll_ty.set
scroll_tx = Scrollbar(frame2, orient=HORIZONTAL, command=text.xview)scroll_tx.grid(row=1, column=0, sticky=E+W)text['xscrollcommand']=scroll_tx.set

如果Text的wrap属性没有指定为NONE,则水平滚动条不会起作用。

 

完整代码可以从下面的链接下载:

https://github.com/xueweiguo/TkinterPrimer/blob/master/Sample/17%20Scrollbar.py

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

你可能感兴趣的:(Tkinter)