首页 > 后端开发 > Python教程 > 如何向 Tkinter 标签网格添加滚动条?

如何向 Tkinter 标签网格添加滚动条?

Susan Sarandon
发布: 2024-12-17 15:26:10
原创
743 人浏览过

How to Add a Scrollbar to a Grid of Tkinter Labels?

在 Tkinter 中向一组小组件添加滚动条

概述

Tkinter 为 List 等小组件提供滚动条、文本框、画布和条目。但是,显示带有滚动条的标签小部件网格可能具有挑战性,因为这些小部件本身不支持滚动条。

解决方案

1.使用 window_create 的文本小部件:

  • 使用 window_create 方法创建文本小部件并添加标签小部件。
  • 此方法很简单,但限制了布局复杂性。

2.带有嵌入框架的画布:

  • 创建一个带有滚动条的画布小部件。
  • 在画布中嵌入一个框架,并将标签小部件放置在框架内。
  • 确定框架的宽度和高度并设置画布的scrollregion选项以匹配这些尺寸。

3。在画布上直接绘图:

  • 创建一个继承自 tk.Frame 的自定义类来管理滚动条和画布。
  • 将标签小部件放置在嵌入框架内。
  • 绑定事件以根据框架的配置调整滚动区域

面向对象的解决方案:

import tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.canvas = tk.Canvas(self, borderwidth=0, background="#ffffff")
        self.frame = tk.Frame(self.canvas, background="#ffffff")
        self.vsb = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)

        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)
        self.canvas.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame")

        self.frame.bind("<Configure>", self.onFrameConfigure)

        self.populate()

    def populate(self):
        for row in range(100):
            tk.Label(self.frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0)
            t = "this is the second column for row %s" % row
            tk.Label(self.frame, text=t).grid(row=row, column=1)

    def onFrameConfigure(self, event):
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

if __name__ == "__main__":
    root = tk.Tk()
    example = Example(root)
    example.pack(side="top", fill="both", expand=True)
    root.mainloop()
登录后复制

过程解决方案:

import tkinter as tk

def populate(frame):
    for row in range(100):
        tk.Label(frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0)
        t = "this is the second column for row %s" % row
        tk.Label(frame, text=t).grid(row=row, column=1)

def onFrameConfigure(canvas):
    canvas.configure(scrollregion=canvas.bbox("all"))

root = tk.Tk()
canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")
frame = tk.Frame(canvas, background="#ffffff")
vsb = tk.Scrollbar(root, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)

vsb.pack(side="right", fill="y")
canvas.pack(side="left", fill="both", expand=True)
canvas.create_window((4,4), window=frame, anchor="nw")

frame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas))

populate(frame)

root.mainloop()
登录后复制

以上是如何向 Tkinter 标签网格添加滚动条?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板