2019年10月10日 / 1,441次阅读 / Last Modified 2020年7月5日
tkinter
Scrollbar控件一般都是与Text或Listbox等需要上下滚动显示的控件一并使用,使得这些显示控件能够上下翻滚以便方便的显示和供人查看所有信息。那么,这就需要将Scrollbar与其它widget进行捆绑使用,本文介绍此内容。其实,从Scrollbar需要自己手动编写代码来进行与其它widget捆绑就能看出,tkinter这个python官方提供的GUI库,是比较底层一点的,所以它更加地灵活。
本文用实际代码用例来说明如何使用Scrollbar。
>>> root = tk.Tk()
>>> listbox = tk.Listbox(root)
>>> listbox.pack(side=tk.LEFT)
>>> scrollbar = tk.Scrollbar(root, command=listbox.yview)
>>> listbox.config(yscrollcommand=scrollbar.set)
>>> scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
>>> for i in range(300):
... listbox.insert(tk.END, str(i))
...
以上代码3-6行是关键。Listbox一般都是放在左边,Scrollbar放在右边并在Y轴进行填充,Scrollbar的command绑定Listbox的yview方法,Listbox的yscrollcommand绑定Scrollbar的set方法。这样就成功了,导入300行数据,看到的效果如下,默认鼠标上下滚动,以及使用Up和Down按键,还有PageUp和PageDown都有效果。
再看一个Scrollbar与Text配合使用的示例:
>>> root = tk.Tk()
>>> text = tk.Text(root)
>>> text.pack(side=tk.LEFT)
>>> scrollbar = tk.Scrollbar(root, command=text.yview)
>>> text.config(yscrollcommand=scrollbar.set)
>>> scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
>>> text.config(width=24)
>>> for i in range(300):
... text.insert(tk.END, str(i))
...
换成了Text控件,但在于Scrollbar配合使用的时候,代码风格是完全一样的。这段代码缩小了Text的宽度,默认窗口太大了,不方便截图。后面插入一堆数据,忘记了换行,就这样吧。以上代码运行效果如下:
以上就是对tkinter中Scrollbar控件使用的总结。最后说明一下,python官方提供了一个ScrolledText类,这个类继承自Text,也是绑定了Scrollbar控件,这段代码如下,供参考学习:
class ScrolledText(Text):
def __init__(self, master=None, **kw):
self.frame = Frame(master)
self.vbar = Scrollbar(self.frame)
self.vbar.pack(side=RIGHT, fill=Y)
kw.update({'yscrollcommand': self.vbar.set})
Text.__init__(self, self.frame, **kw)
self.pack(side=LEFT, fill=BOTH, expand=True)
self.vbar['command'] = self.yview
# Copy geometry methods of self.frame without overriding Text
# methods -- hack!
text_meths = vars(Text).keys()
methods = vars(Pack).keys() | vars(Grid).keys() | vars(Place).keys()
methods = methods.difference(text_meths)
for m in methods:
if m[0] != '_' and m != 'config' and m != 'configure':
setattr(self, m, getattr(self.frame, m))
对Scrollbar的使用,基本上与本文给出的两个示例一样。
-- EOF --
本文链接:https://www.pynote.net/archives/1284
©Copyright 麦新杰 Since 2019 Python笔记