tkinter有表格小部件吗?

67
我正在学习Python,并希望使用它创建一个简单的GUI应用程序。由于Tkinter已经内置(并且非常易于使用),因此我想使用它来构建我的应用程序。
我想制作一个应用程序,该应用程序将显示一个包含从数据库加载的某些数据的表格。
我已经搜索了“table”,但是找不到任何关于“Tkinter table”组件的示例和/或文档。
Tkinter有内置的“table”组件吗?如果没有,我应该使用什么?

https://github.com/clarenceangel/tkinterstuff 是非常适合初学者的简单项目,能够完美地满足你的需求。 - Mixstah
这是我认为使用tkinter可以制作的最好的表格。 - user13786942
10个回答

50
你可以使用Tkinter的grid。
创建一个类似于Excel的简单表格的方法:
try:
    from tkinter import * 
except ImportError:
    from Tkinter import *

root = Tk()

height = 5
width = 5
for i in range(height): #Rows
    for j in range(width): #Columns
        b = Entry(root, text="")
        b.grid(row=i, column=j)

mainloop()
你可以通过访问网格的子节点并从那里获取值来获取数据。

我认为你忘记添加 b.pack() 了。 - Sam Chats
30
不,您绝不能将网格布局和包装布局混合使用。 - twasbrillig
2
如果我创建了这样的一个表,那么在创建后我该如何引用其中的字段呢?如果我理解正确的话,您是说可以使用网格坐标来引用内容? - Breno Baiardi
2
@Steven:“b”代表什么?这是Entry的传统名称吗? - Al Lelopath

29

Tkinter没有内置的表格小部件。您可以使用的最接近的是tkinter子包ttk中的ListboxTreeview

但是,您可以使用tktable,这是一个封装了Tcl/Tk TkTable窗口小部件的库,由Guilherme Polo编写。请注意:要使用此封装库,您首先需要安装原始Tk的TkTable库,否则您将会收到“导入错误”。


12
真不敢相信一个如表格这样基本的GUI显示元素没有被包含在tkinter中。拜托了,tkinter... - NoName

21

3
这里有一个很好的例子,展示如何在Python中创建表格。链接 - Mark Mikofski

16

我是一款名为tksheet的纯Python编写的tkinter表格小部件的作者,仅支持Python 3.63+。

它使用tkinter画布工作并且只重新绘制表格的可见部分,因此即使有数亿个单元格,它也可以运行得相当流畅。

除了许多其他功能外,您还可以轻松更改任何颜色并突出显示单元格的背景和前景。

您可以在这里找到存储库:https://github.com/ragardner/tksheet

tksheet基本示例


1
我刚开始使用你们的小部件,感觉非常棒。但是有一件事情我无法实现,就是将表格居中。我已经使用了align='center',但是在使用pack时仍然无法将表格居中。 - Sean2148
@Sean2148 实际上,我第一个答案有所更正 - 您可以在y和x轴上居中小部件,但仅使用.grid()而不是pack - ragardner
你觉得能否在文档中添加一个文本编辑器的示例? - dataman
是否有演示与tksheet交互的视频,例如使用Ctrl +单击选择多个不连续行,然后拖放它们以更改行的顺序等? - root

15

6
该链接现在已重定向至https://github.com/dmnfarrell/tkintertable,指明此代码仅适用于Python2。 - handle
1
Freewind:尽管 tkintertable 是为 Python 2 编写的,但它似乎是纯 Python 的 - 因此,由于它是开源的,将其更新以在 Python 3 中工作可能并不太困难。 - martineau
1
如果您正在使用pandas,这个可能是一个不错的选择:https://github.com/dmnfarrell/pandastable - stevenferrer
我没有发现Python 3存在任何问题,因此@handle的评论现在似乎已经过时。 - Wolf
该库现在兼容Python 3! - Thierryonre

5

除了@steven的回复之外,您可以使用以下方法引用任何表格单元格

from Tkinter import *

root = Tk()

height = 5
width = 5
cells = {}
for i in range(height): #Rows
    for j in range(width): #Columns
        b = Entry(root, text="")
        b.grid(row=i, column=j)
        cells[(i,j)] = b

mainloop()

4

使用 prettytable 库

大家好,我们可以使用 prettytable 库来创建像 tkinter 中的 SQL 表格一样漂亮的表格。

首先在命令行中执行以下代码来安装 prettytable 库:

pip install prettytable

下面是一个自解释的代码,用于制作表格:

from prettytable import PrettyTable
from tkinter import *

win=Tk()

t=Text(win)#Inside text widget we would put our table

x=PrettyTable()

x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]

x.add_row(["Adelaide", 1295, 1158259, 600.5])
x.add_row(["Brisbane", 5905, 1857594, 1146.4])
x.add_row(["Darwin", 112, 120900, 1714.7])
x.add_row(["Hobart", 1357, 205556, 619.5])
x.add_row(["Sydney", 2058, 4336374, 1214.8])
x.add_row(["Melbourne", 1566, 3806092, 646.9])
x.add_row(["Perth", 5386, 1554769, 869.4])

t.insert(INSERT,x)#Inserting table in text widget
t.pack()

win.mainloop()

此代码的输出:

enter image description here

将以下代码行放在 t.insert(INSERT, x) 后面,以使此表格只读

t.config(state=DISABLED)

使用这种方法可以轻松创建表格。如果您想了解更多关于prettytable的信息,请点击这里


3
我做了这个东西,它与it技术有关。它可以创建一个表格,并将其作为帧返回,您可以将其添加到帧或根中。只要每行的列是偶数,您就可以使用任意数量的行和列的csv文件来填充它。您可以在此处找到它:https://github.com/clarenceangel/tkinterstuff

1

您可以尝试使用tksheet小部件,它就像tkinter中的Excel文件一样。您可以在其中制作表格。如果您使用Windows操作系统,则可以使用以下方式进行安装:

pip install tksheet

and when importing in tkinter you can use,

from tksheet import Sheet

import tkinter as tk

0

补充@Jojojustin和@Steven的意见 - 使“表格”具有响应性

from tkinter import * 
root = Tk()

row = 5
col = 5
cells = {}
for i in range(row):
    for j in range(col):
        root.columnconfigure(j,weight=20) # making the columns responsive 
        root.rowconfigure(i,weight=20) # making the rows responsive 
        b = Entry(root,text="")
        b.grid(row=i,column=j,sticky=NSEW)
        cells[(i,j)] = b
root.mainloop()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接