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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tk-smooth-scrollbar是一个用于在Tkinter应用程序中实现平滑滚动条效果的第三方库。它可以与垂直方向和水平方向的滚动条组件相关联。可以使用Scrollbar组件的方法来使用tk-smooth-scrollbar。 在使用tk-smooth-scrollbar时,首先需要创建一个Canvas画布,并设置其背景颜色、高度、宽度、滚动范围以及与垂直滚动条和水平滚动条的关联。然后,您可以使用grid方法将画布放置在Tkinter窗口中,并使用grid方法将滚动条放置在画布周围。 请注意,您还需要为滚动条配置命令,以便滚动条可以与画布位置相对应。最后,使用grid_columnconfigure和grid_rowconfigure方法配置滚动条。 以下是使用tk-smooth-scrollbar实现滚动条的代码示例: ```python import tkinter as tk from ttkthemes import ThemedTk from smoothscrollbar import Scrollbar # 创建主窗口 top = ThemedTk(theme="arc") # 创建水平和垂直滚动条 h = Scrollbar(top, orient="horizontal") v = Scrollbar(top, orient="vertical") # 创建画布 canvas = tk.Canvas(top, bg="blue", height=250, width=300, scrollregion=(0, 0, 1000, 1000), yscrollcommand=v.set, xscrollcommand=h.set) # 与滚动条关联 h['command'] = canvas.xview v['command'] = canvas.yview # 放置画布和滚动条 canvas.grid(column=0, row=0, sticky=(tk.N, tk.W, tk.E, tk.S)) h.grid(column=0, row=1, sticky=(tk.W, tk.E)) v.grid(column=1, row=0, sticky=(tk.N, tk.S)) # 配置滚动条 top.grid_columnconfigure(0, weight=1) top.grid_rowconfigure(0, weight=1) # 运行主循环 top.mainloop() ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值