Python GUI编程入门(35)-生成带有滚动功能控件的scrollable函数

当程序达到一定规模后,经常会希望构建带滚动功能的控件。例如下图中的FileBrowser,无论是左侧的TreeView还是右侧的ListView都带有水平和垂直两个Scrollbar控件。

Tkinter中生成带有Scrollbar的控件的代码大致如下:

 

 

#生成Frame容器以容纳TreeView,Scrollbartree_area = Frame(paned_window)# 设定水平伸展tree_area.grid_rowconfigure(0, weight=1)# 设定垂直伸展tree_area.grid_columnconfigure(0, weight=1)# 生成TreeViewtree_view = Treeview(tree_area, show='tree', selectmode='browse')# 设定TreeView布局位置tree_view.grid(row=0, column=0, sticky='nsew')# 生成垂直滚动条scroll_ty = Scrollbar(tree_area, orient=VERTICAL, command=tree_view.yview)# 设定滚动条布局位置scroll_ty.grid(row=0, column=1, sticky=N+S)# 关联滚动动作tree_view['yscrollcommand']=scroll_ty.set# 生成水平滚动条scroll_tx = Scrollbar(tree_area, orient=HORIZONTAL, command=tree_view.xview)# 设定滚动条布局位置scroll_tx.grid(row=1, column=0, sticky=E+W)# 关联滚动动作tree_view['xscrollcommand']=scroll_tx.set
 

逻辑虽然清晰,但是同样的事情多次重复总是比较麻烦,为此作者设计了如下的scrollable函数,用以简化此过程:

 

 

def scrollable(master, w_type, **kwargs):    # 获取SizeGrip设定内容    size_grip = kwargs.get('size_grip')    # 从关键词参数中去掉'size_grip'设定    if size_grip:        kwargs.pop('size_grip')    # 构建Frame控件    frame = Frame(master)    # 设定控件水平伸展    frame.grid_rowconfigure(0, weight=1)    # 设定控件垂直伸展    frame.grid_columnconfigure(0, weight=1)    # 构建控件    widget = w_type(frame, **kwargs)    # 设定控件布局    widget.grid(row=0, column=0, sticky='nsew')    # 构建垂直Scrollbar    scroll_y = Scrollbar(frame, orient=VERTICAL, command=widget.yview)    # 设定控件布局    scroll_y.grid(row=0, column=1, sticky=N + S)    # 绑定滚动动作    widget['yscrollcommand'] = scroll_y.set    # 构建水平Scrollbar    scroll_x = Scrollbar(frame, orient=HORIZONTAL, command=widget.xview)    # 设定控件布局    scroll_x.grid(row=1, column=0, sticky=E + W)    # 绑定滚动动作    widget['xscrollcommand'] = scroll_x.set    # 生成Sizegrip控件    if size_grip:        Sizegrip(frame).grid(row=1, column=1)    return frame,widget
 

虽然内容基本相同,只是进行了简单的封装,但产生的效果却很明显:构建同样的具有滚动功能的Treeview的代码从20多行变成了1行!

 

tree_area, tree_view = scrollable(paned_window, Treeview, show='tree', selectmode='browse')
 

还有一个好处是scrollable的使用根本无需了解Scrollbar的用法。

 

完整代码可以从以下地址下载:

https://github.com/xueweiguo/TkinterPrimer/blob/master/FileBrowser

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

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值