首页 > 解决方案 > 如何在表格中添加滑动条?

问题描述

我一直在创建一个应用程序,其中有可以添加到表中的客户端,问题是,我需要一个滚动条来滚动浏览所有客户端,因为应用程序高度是有限的,而客户端不是。使用 tkinter 我找到了一种使用条目和网格创建“表”的方法,但是如果我想创建 100 行怎么办?它们会在视图之外,所以这就是需要滚动条的原因。

对于那些了解 Java 的人,我想创建类似于 Jtable 的东西,它具有创建行、删除行的方法,并且一旦 JTable 用完空间,它就会自动生成滚动条。

我尝试使用 ttk 中的 TkTable 并弄乱了一些属性,但我更喜欢 Entries 的外观。

root = Tk()

root.geometry("1200x900")

for i in range(10):
    e = Entry(relief=RIDGE)
    e.grid(row=i, column=2, sticky=N)

root.mainloop()

我创建了一个 root = Tk() 并使用 root 将它们网格化。您将在另一个之上看到 10 个条目。

标签: pythontkinter

解决方案


当一个窗口包含许多小部件时,它们可能并非全部可见。但是,窗口(Tk 或 Toplevel 实例)和 Entry 都不是可滚动的。

使窗口内容可滚动的一种解决方案是将所有小部件放在一个 Frame 中,然后使用 create_window 方法将此 Frame 嵌入到 Canvas 中。

from tkinter import *

root = Tk()
canvas = Canvas(root)
scroll_y = Scrollbar(root, orient="vertical", command=canvas.yview)

frame = Frame(canvas)

# group of widgets
for i in range(100):
    e = Entry(frame, relief=RIDGE, width = 100)
    e.grid(row=i, column=2, sticky=N)

# put the frame in the canvas
canvas.create_window(0, 0, anchor='nw', window=frame)
# make sure everything is displayed before configuring the scrollregion
canvas.update_idletasks()

canvas.configure(scrollregion=canvas.bbox('all'),
                 yscrollcommand=scroll_y.set)

canvas.pack(fill='both', expand=True, side='left')
scroll_y.pack(fill='y', side='right')

root.mainloop()

输出:

在此处输入图像描述


推荐阅读