鱼C论坛

 找回密码
 立即注册
查看: 1176|回复: 10

[已解决]tkinter添加滚动条

[复制链接]
发表于 2024-2-9 20:00:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jasonpzc 于 2024-2-9 20:14 编辑

[Tkinter] Tkinter 窗口组件:Scrollbar
Scrollbar 组件通常几乎与 Text 组件、Canvas 组件和 Listbox 组件一起使用,水平滚动条还能跟 Entry 组件配合。

但是当有各种大量组件(Button, Label)出现在一个Frame中,很遗憾的是,Frame不支持Scrollbar:
下载.png
难道Frame可以包含在Text 组件Canvas 组件中?
求大佬帮助
最佳答案
2024-2-10 21:27:44
在 Tkinter 中,Frame 组件本身确实不直接支持滚动条。

如果你有很多的 Button、Label 等组件放在一个 Frame 中,并希望它们能够滚动。

鱼油需要将 Frame 放在一个 Canvas 中,然后将 Canvas 与 Scrollbar 关联起来。

大致步骤:

  • 1. 创建一个 Canvas 组件。
  • 2. 创建一个 Scrollbar 组件,并将其命令 (command) 设置为 Canvas 的 yview 方法。
  • 3. 将 Canvas 的 yscrollcommand 配置为 Scrollbar 的 set 方法。
  • 4. 创建一个 Frame 作为所有其他组件的容器,并将其放置在 Canvas 上。
  • 5. 将 Frame 的宽度和高度配置为与 Canvas 相匹配,并更新 Canvas 的滚动区域以适应 Frame。

实现上述滚动条代码(自己修改一下就好):
import tkinter as tk

root = tk.Tk()

# 创建滚动条
scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# 创建画布
canvas = tk.Canvas(root, yscrollcommand=scrollbar.set)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

# 将滚动条的command配置到画布的yview
scrollbar.config(command=canvas.yview)

# 创建一个frame放在画布上
frame = tk.Frame(canvas)

# 将frame添加到画布的窗口中
canvas.create_window((0, 0), window=frame, anchor='nw')

# 填充frame,作为演示,这里我们添加了一些按钮
for i in range(50):
    tk.Button(frame, text=f"Button {i}").pack()

# 更新滚动区域
frame.update_idletasks()
canvas.config(scrollregion=canvas.bbox('all'))

root.mainloop()
Canvas 的 create_window 方法用于将 Frame 放置在 Canvas 上。

然后,可以将所有需要滚动的组件放置在这个 Frame 中。

这样,当滚动时,实际上是在 Canvas 内部滚动 Frame,而 Frame 包含了所有其他组件。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-9 20:01:09 | 显示全部楼层
在Tkinter中添加滚动条,可以使用Scrollbar组件。以下是一个简单的示例代码:
import tkinter as tk

root = tk.Tk()

# 创建一个带有滚动条的文本框
text = tk.Text(root)
text.pack(side=tk.LEFT, fill=tk.BOTH)

# 创建一个滚动条,并将其连接到文本框
scrollbar = tk.Scrollbar(root, command=text.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# 设置文本框的滚动条属性
text.config(yscrollcommand=scrollbar.set)

# 添加一些文本到文本框中
for i in range(100):
    text.insert(tk.END, f"This is line {i+1}\n")

root.mainloop()

上述代码中,我们创建了一个带有滚动条的文本框,并将滚动条与文本框相关联。然后通过设置文本框的`yscrollcommand`属性,使得滚动条能够控制文本框的垂直滚动。

注意:这只是一个简单的示例,你可以根据需要对窗口进行修改和调整。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-9 20:03:45 | 显示全部楼层
FishC 发表于 2024-2-9 20:01
在Tkinter中添加滚动条,可以使用Scrollbar组件。以下是一个简单的示例代码:

可是我想让Scrollbar和一个Frame(包含Button, Label等组件)绑定,可以用什么方式?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-9 20:04:00 | 显示全部楼层
jasonpzc 发表于 2024-02-09 20:03
可是我想让Scrollbar和一个Frame(包含Button, Label ...


如果要让滚动条和一个Frame组件绑定,可以使用Canvas组件来实现。Canvas组件是Tkinter中的一个可扩展控件,它允许在

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-9 20:04:34 | 显示全部楼层
FishC 发表于 2024-2-9 20:04
如果要让滚动条和一个Frame组件绑定,可以使用Canvas组件来实现。Canvas组件是Tkinter中的一个可扩展控 ...

继续
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-9 20:04:44 | 显示全部楼层


在Canvas中添加和显示其他组件,并使用Scrollbar来实现滚动效果。下面是一个示例代码:

```python
import tkinter as tk

root = tk.Tk()

# 创建一个Canvas组件

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-9 20:04:57 | 显示全部楼层
FishC 发表于 2024-2-9 20:04
在Canvas中添加和显示其他组件,并使用Scrollbar来实现滚动效果。下面是一个示例代码:

```python

继续
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-9 20:05:05 | 显示全部楼层


我很抱歉,我之前的回答似乎没有完全解答您的问题。要在Tkinter中添加滚动条以滚动整个窗口或特

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-9 20:05:41 | 显示全部楼层
FishC 发表于 2024-2-9 20:05
我很抱歉,我之前的回答似乎没有完全解答您的问题。要在Tkinter中添加滚动条以滚动整个窗口或特

以 ...

不要说话只说一半哪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-9 20:06:50 | 显示全部楼层
jasonpzc 发表于 2024-02-09 20:05
不要说话只说一半哪


非常抱歉让您感到困惑。在Tkinter中,要将滚动条添加到整个窗口或特定组件内,需要使用Canvas和Scrollbar组件的组

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-10 21:27:44 | 显示全部楼层    本楼为最佳答案   
在 Tkinter 中,Frame 组件本身确实不直接支持滚动条。

如果你有很多的 Button、Label 等组件放在一个 Frame 中,并希望它们能够滚动。

鱼油需要将 Frame 放在一个 Canvas 中,然后将 Canvas 与 Scrollbar 关联起来。

大致步骤:

  • 1. 创建一个 Canvas 组件。
  • 2. 创建一个 Scrollbar 组件,并将其命令 (command) 设置为 Canvas 的 yview 方法。
  • 3. 将 Canvas 的 yscrollcommand 配置为 Scrollbar 的 set 方法。
  • 4. 创建一个 Frame 作为所有其他组件的容器,并将其放置在 Canvas 上。
  • 5. 将 Frame 的宽度和高度配置为与 Canvas 相匹配,并更新 Canvas 的滚动区域以适应 Frame。

实现上述滚动条代码(自己修改一下就好):
import tkinter as tk

root = tk.Tk()

# 创建滚动条
scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# 创建画布
canvas = tk.Canvas(root, yscrollcommand=scrollbar.set)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

# 将滚动条的command配置到画布的yview
scrollbar.config(command=canvas.yview)

# 创建一个frame放在画布上
frame = tk.Frame(canvas)

# 将frame添加到画布的窗口中
canvas.create_window((0, 0), window=frame, anchor='nw')

# 填充frame,作为演示,这里我们添加了一些按钮
for i in range(50):
    tk.Button(frame, text=f"Button {i}").pack()

# 更新滚动区域
frame.update_idletasks()
canvas.config(scrollregion=canvas.bbox('all'))

root.mainloop()
Canvas 的 create_window 方法用于将 Frame 放置在 Canvas 上。

然后,可以将所有需要滚动的组件放置在这个 Frame 中。

这样,当滚动时,实际上是在 Canvas 内部滚动 Frame,而 Frame 包含了所有其他组件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 15:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表