tkinter -- Scrollbar

Scrollbar(滚动条),可以单独使用,但最多的还是与其它控件(Listbox,Text,Canva 等)结合使用

创建一个Scrollbar

代码:

import tkinter as tk

root = tk.Tk()
tk.Scrollbar(root).pack()
root.mainloop()

效果:

显示了一个 Scrollbar,但什么也做不了,无法拖动 slider

通过 set 方法来设置 slider 的位置

使用水平滚动条,通过 set 将值设置为(0.5,1),即 slider 占整个 Srollbar 的一半

代码:

import tkinter as tk

root = tk.Tk()
s = tk.Scrollbar(root, orient='horizontal')
s.set(0.5, 1)
s.pack()
root.mainloop()

结果:

单独使用还是比较少见,大部分应用还是与其它控件的绑定,以下是将一个 Listbox与 Scrollbar 绑定的例子

代码:

import tkinter as tk

root = tk.Tk()
lb = tk.Listbox(root)
sl = tk.Scrollbar(root)

# side 指定 Scrollbar 为居右;fill 指定填充满整个剩余区域,
# 到 WM 在时候再详细介绍这几个属性
sl.pack(side='right', fill='y')

# 指定 Listbox 的 yscrollbar 的回调函数为 Scrollbar 的 set
lb['yscrollcommand'] = sl.set
for i in range(100):
    lb.insert(tk.END,str(i))
# side 指定 Listbox 为居左
lb.pack(side='left')

# 指定 Scrollbar 的 command 的回调函数是 Listbar 的 yview
sl['command'] = lb.yview
root.mainloop()

结果:

这样理解二者之间的关系:当 Listbox 改变时,Scrollbar 调用 set 以改变 slder 的位置;当 Scrollbar 改变了 slider 的位置时,Listbox 调用 yview 以显示新的 list 项,为了演示这两种关系先将 yscrollcommad 与 scrollbar 的 set 解除绑定,看看会有什么效果。

代码;

import tkinter as tk

root = tk.Tk()
lb = tk.Listbox(root)
sl = tk.Scrollbar(root)

# side 指定 Scrollbar 为居右;fill 指定填充满整个剩余区域,
# 到 WM 在时候再详细介绍这几个属性
sl.pack(side='right', fill='y')


for i in range(100):
    lb.insert(tk.END,str(i))
# 使用索引为50的元素可见
lb.see(50)
lb.pack(side='left')

# 指定 Scrollbar 的 command 的回调函数是 Listbar 的 yview
sl['command'] = lb.yview
root.mainloop()

结果:

运行结果,Listbox 显示了50项,即 Listbox 的视图已经到50了,但 Scrollbar 的 slider仍旧位于0处。也就是说 Scroolbar 没有收到 set的命令。即说明解除此绑定,Scrollbar 将不再响应 Listbox 视图改变的消息。但仍可以使用 Scrollbar 的 slider 来移动 Listbox 的视图

再测试一下,解除 Scrollbar 的 command 与 Listbox 的 yview 的关系

代码:

import tkinter as tk

root = tk.Tk()
lb = tk.Listbox(root)
sl = tk.Scrollbar(root)

# side 指定 Scrollbar 为居右;fill 指定填充满整个剩余区域,
# 到 WM 在时候再详细介绍这几个属性
sl.pack(side='right', fill='y')

# 指定 Listbox 的 yscrollbar 的回调函数为 Scrollbar 的 set
lb['yscrollcommand'] = sl.set

for i in range(100):
    lb.insert(tk.END,str(i*100))
# 使用索引为50的元素可见
lb.see(50)
lb.pack(side='left')


# 解除 Scrollbar 的 command 与 Listbox 的 yview 的关系
# sl['command'] = lb.yview
root.mainloop()

结果

运行程序,Scrollbar 的 slider 已经到了50位置,也就是说 Scrollbar 响应了 Listbox 视图改变的消息,调用 了自己的 set 函数。

进行操作:拖动 slder 或点击 up/down 按钮,Listbox 的视图没有任何反应,即 Listbox不会响应 Scrollbar 的消息了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

在 Python 程序中显示进度条

转自 http://my.oschina.net/jhao104/blog/681507 1、利用标准输出 先说一下文本系统的控制符: \r: 将光标移...

3287
来自专栏smy

prompt() 方法,弹框带输入框

prompt()  有alert的风格,却带着输入框,这是怎么实现的呢? 语法 prompt(text,defaultText) 参数 描述 t...

4185
来自专栏代码世界

表单提交中的input、button、submit的区别

1.input[type=submit] 我们直接来看例子: ? 代码如下: <form> <input name="name"> <input...

39010
来自专栏React Native开发圈

React Native 弹出框组件

npm install--save react-native-popup-dialog

1461
来自专栏九彩拼盘的叨叨叨

浏览器默认样式

浏览器都拥有一套自己的默认样式。 浏览器之所以有默认样式表,是为了没有样式表的页面也能凑活着看。 不同浏览器;以及版本不同的浏览器的默认样式一般都是不同的。

782
来自专栏Android干货

安卓开发_时间、日期选择器的简单使用

3227
来自专栏Android干货

小程序实践(四):动态控制组件的显示/隐藏

组件有个属性:hidden='' ,值为true/false ,当false的时候说明不隐藏,当true的时候说明隐藏,注意该隐藏是不保留组件位置的。

1162
来自专栏Android干货

小程序实践(三):九宫格实现及item跳转

1863
来自专栏DeveWork

移除WordPress 管理后台的主题编辑功能

出于安全考虑,如果你的WordPress 是多人使用的(比如说一个团队博客,多用户管理)。那么为防止一些小白胡乱修改后台导致网页问题,可以移除WordPress...

2076
来自专栏cloudskyme

jquery clone()表格之后查找里边的元素

clone() 克隆匹配的DOM元素并且选中这些克隆的副本。 在想把DOM文档中元素的副本添加到其他位置时这个函数非常有用。 要做到动态添加表格,并且添加后修改...

3545

扫码关注云+社区

领取腾讯云代金券