Есть ли у tkinter табличный виджет?
Я изучаю Python, и я хотел бы использовать его для создания простого приложения с графическим интерфейсом, и так как Tkinter
уже встроен (и очень прост в использовании), я хотел бы использовать его для создания моего приложения.
Я хотел бы сделать приложение, которое будет отображать таблицу, которая содержит некоторые данные, которые я загрузил из моей базы данных.
Я искал table
но не смогли найти никаких примеров и / или документации, касающихся Tkinter table
составная часть.
Есть ли Tkinter
иметь встроенный table
составная часть? Если нет, что я могу / должен использовать вместо этого?
10 ответов
Tkinter не имеет встроенного виджета таблицы. Самое близкое, что вы можете использовать, это Listbox
или Treeview
субпакета tkinter ttk
,
Тем не менее, вы можете использовать tktable, который является оберткой вокруг Tcl/Tk
TkTable
виджет, написанный Гильерме Поло. Примечание: чтобы использовать эту библиотеку обертки, вы должны сначала установить оригинальные Tk's TkTable
библиотека, в противном случае вы получите "ошибка импорта".
Вы можете использовать сетку Tkinter.
Чтобы создать простую таблицу в стиле Excel:
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()
Вы можете получить данные, обратившись к дочерним элементам сетки и получив оттуда значения.
Если таблица доступна только для чтения и вы используете достаточно современную версию Tkinter, вы можете использовать виджет ttk.Treeview.
Вы также можете довольно легко создать сетку Entry
или же Label
виджеты. Посмотрите этот ответ для примера: /questions/42439448/sozdanie-tablitsyi-pohozhej-na-tkinter/42439449#42439449
Я являюсь автором виджета таблицы tkinter, написанного на чистом Python с именем tksheet
работает только для Python 3.63+
Он работает с использованием холстов tkinter и перерисовывает только видимую часть таблицы, поэтому работает довольно плавно даже с сотнями миллионов ячеек.
Помимо многих других функций, вы также можете легко изменить любые цвета и выделить фон ячеек и передний план.
Вы можете найти репозиторий здесь: https://github.com/ragardner/tksheet
Вы можете использовать tkintertable. Смотрите здесь, как начать использовать его.
В дополнение к ответу @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()
Используя prettytable
Привет всем, мы можем использовать библиотеку prettytable для создания отличных таблиц, подобных таблице sql.
Сначала сделайте pip install prettytable в cmd
теперь это не требующий пояснений код для создания таблицы:
from prettytable import PrettyTable
from tkinter import *
win=Tk()
t=Text(win)
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)
t.pack()
win.mainloop()
https://github.com/clarenceangel/tkinterstuff Я сделал это, но я не профессионал. Тем не менее, он создает таблицу и возвращает ее в виде фрейма, который можно добавить к фрейму или корню. Вы передаете его в формате csv с любым количеством строк и столбцов, если столбцы, конечно, находятся в каждой строке.
Вы можете попробовать виджет tksheet, он похож на файлы Excel в tkinter. в котором вы также можете делать таблицы. если вы используете Windows, вы можете установить его, используя,
pip install tksheet
и при импорте в tkinter вы можете использовать,
from tksheet import Sheet
import tkinter as tk
Добавление к @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()