Python——Tkinter,滚动条Scrollbar(水平+垂直)的实现

本文介绍了如何在Python的Tkinter库中实现水平和垂直滚动条。通过详细步骤,包括引入包、创建滚动条控制控件(以Treeview为例)并绑定,以及确保Treeview与滚动条的移动同步。示例代码展示了如何设置和使用滚动条。


前言

  对于Python Tkinter的滚动条Scrollbar组件,参看了很多资料,都觉得一头雾水,实验多次之后的结论,如有错误,请纠正,万分感谢


Python——Tkinter 滚动条 Scrollbar的实现(水平+垂直一起)

一、引入包,初始化Scrollbar

#包的引入
import tkinter as tk
from tkinter import ttk

# 实例化object,建立窗口window
window = tk.Tk()

#滚动条初始化(scrollBar为垂直滚动条,scrollBarx为水平滚动条)
scrollBar = Scrollbar(window)
scrollBarx =Scrollbar(window, orient=HORIZONTAL)

#靠右,充满Y轴
scrollBar.pack(side=RIGHT, fill=Y)
#靠下,充满X轴
scrollBarx.pack(side=BOTTOM,fill=X)

二、创建滚动条Scrollbar的控制控件(以Treeview为例),并将滚动条与控件绑定

  在这里,我是在页面里做了个表格,用Listbox等其他控件都是一样的,具体设置可以不用看,下方代码主要看图片中标红部位!!!Treeview的细节部分代码没有放。
在这里插入图片描述
  表示创建一个表格, x方向的滚动条指令是xscrollbarl 对象的set()方法,y方向的滚动条指令是scrollbar对象的set()方法,代码如下:

# 页面内显示表格
# height 表示要显示几行数据(这个部件的宽度是根据列的多少以及每列的设置宽度一同定义的)
treeview = ttk.Treeview(window, height=31, show="headings",columns=columns,
yscrollcommand=scrollBar.set,xscrollcommand=scrollBarx.set)

三、Treeview与Scrollbar的移动位置同步

#side=LEFT表示表格位于窗口左端,
#fill=BOTH表示当窗口改变大小时会在X与Y方向填满窗口
treeview.pack(side=LEFT, fill=BOTH)

#而当用户操纵滚动条的时候,自动调用 Treeview 组件的 yview()与xview() 方法
#即滚动条与页面内容的位置同步
scrollBar.config(command=treeview.yview)
scrollBarx.config(command=treeview.xview)

# 主窗口循环显示
window.mainloop()

上图(可拖动的水平与垂直滚动条):
在这里插入图片描述


  喜欢与热爱不是一回事儿,sincerely,end.
### 如何在 Python Tkinter实现使用滚动条功能 在 PythonTkinter 库中,`Scrollbar` 组件用于提供滚动功能。它通常与其他可滚动的小部件(如 `Text`, `Listbox`, 或者自定义的 Canvas)一起使用来管理大量内容。 以下是关于如何在 Tkinter实现使用滚动条的具体方法: #### 基本概念 `Scrollbar` 是一种辅助控件,本身并不显示任何数据,而是通过绑定其他小部件(如 `Listbox`、`Text` 等),控制这些小部件的内容展示范围[^1]。 #### 实现步骤说明 为了使滚动条生效,需要完成两个主要操作: 1. **将滚动条与目标小部件关联**:这可以通过设置目标小部件的相关属性(如 `yscrollcommand` 对于垂直方向或者 `xscrollcommand` 对于水平方向)指向滚动条对象的方法。 2. **配置滚动条的行为**:调用滚动条的 `.config()` 方法并指定其命令参数为目标小部件的视图调整函数(如 `listbox.yview` 或 `text.yview`)。 #### 示例代码 以下是一个完整的例子,展示了如何在一个窗口中创建带有滚动条的列表框 (`Listbox`) 文本区域 (`Text`)。 ```python import tkinter as tk # 初始化主窗口 root = tk.Tk() root.title("Tkinter Scrollbar Example") # 创建框架以便更好地布局 frame_listbox = tk.Frame(root) frame_text = tk.Frame(root) frame_listbox.pack(padx=10, pady=5) frame_text.pack(padx=10, pady=5) # === Listbox with Vertical Scrollbar === label_listbox = tk.Label(frame_listbox, text="Listbox with Scrollbar:") label_listbox.pack() # 创建一个垂直滚动条 scrollbar_listbox = tk.Scrollbar(frame_listbox, orient='vertical') scrollbar_listbox.pack(side='right', fill='y') # 创建一个Listbox并与滚动条关联 listbox = tk.Listbox(frame_listbox, yscrollcommand=scrollbar_listbox.set) for item in range(50): listbox.insert(tk.END, f"Entry {item}") listbox.pack(side='left', fill='both') # 配置滚动条行为 scrollbar_listbox.config(command=listbox.yview) # === Text Widget with Both Scrollbars (Vertical and Horizontal) === label_text = tk.Label(frame_text, text="Text Widget with Scrollbars:") label_text.pack() # 创建水平垂直滚动条 scrollbar_vertical = tk.Scrollbar(frame_text, orient='vertical') scrollbar_horizontal = tk.Scrollbar(frame_text, orient='horizontal') scrollbar_vertical.pack(side='right', fill='y') scrollbar_horizontal.pack(side='bottom', fill='x') # 创建一个Text widget并与滚动条关联 text_widget = tk.Text( frame_text, wrap='none', yscrollcommand=scrollbar_vertical.set, xscrollcommand=scrollbar_horizontal.set ) text_widget.pack(expand=True, fill='both') # 插入一些示例文本 sample_text = "This is a sample line of text.\n" * 30 text_widget.insert('end', sample_text) # 配置滚动条行为 scrollbar_vertical.config(command=text_widget.yview) scrollbar_horizontal.config(command=text_widget.xview) # 启动事件循环 root.mainloop() ``` 此代码片段演示了两种常见的场景: - 使用 `Listbox` 结合单个垂直滚动条。 - 使用 `Text` 控件结合水平垂直滚动条。 #### 关键点解析 1. **滚动条的方向**: 可以通过 `orient='vertical'` 或 `orient='horizontal'` 来设定滚动条的方向[^2]。 2. **滚动条的位置**: 利用了 `pack()` 函数中的 `side` 参数决定滚动条相对于父容器的位置。 3. **双向绑定机制**: 滚动条目标小部件之间存在相互依赖关系——当用户拖拽滚动条时会更新小部件视图;而当用户直接交互改变小部件内容位置时也会同步更新滚动条状态。 #### 注意事项 如果希望滚动条始终可见,则无需额外处理;但如果想让滚动条仅在必要时才出现,则需手动检测内容大小变化,并动态隐藏/显示滚动条。 ---
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值