Найти - Пользователи
Полная версия: Tkinter: Таблица (grid) c возможностью редактирования
Начало » GUI » Tkinter: Таблица (grid) c возможностью редактирования
1
Cover Story
Всем доброго!
Подскажите пожалуйста tkinter-widget таблицу в которой можно было бы редактировать значение ячеек.
DHT
В самом tkinter вроде нету, но можно tile вроде заюзать.
На 100% не уверен, просто видел когда сам искал… для себя использовал ttk.treeview, а для редактирования набросал отдельно небольшой интерфейс.
Cover Story
Хотя бы сторонний виджет, вроде как бы tktable подходил. Но не знаю на сколько он гибок. Т. е. данные исправить в нем можно, но можно ли их потом забрать оттуда?
warpson
Cover Story
Но не знаю на сколько он гибок. Т. е. данные исправить в нем можно, но можно ли их потом забрать оттуда?
Это раз, затем непонятнен способ заполнения таблицы из python :

для MultiListbox есть insert прямо из python (а не из tcl), для tktable я не нашел моста.
Да и только наполнить tcl-таблицу для чтения полбеды - затем надо сразу после cell-редактирования
тут же сделать sql-update

Внимательно пролистав докцию, увидел сентенцию :
html
The table can use a Tcl array variable or Tcl command for data storage and retrieval
readme
multiple data sources ((Tcl array || Tcl command) &| internal caching)
Вот этот пресловутый 'Tcl command' хотелось бы поюзать из python.

А то получается, что ГУЙ работает сам по себе, однажды активированный питоном,
и никаких процентов (в виде отредактированных данных для DML-команд скажеи для pyodbc ) питону не возвращает…

Кто как заливает обратно данные из tktable в sql-базу ?

P.S.
man
Command-Line Name:-command
Database Name: command
Database Class: Command

Specified a command to use as a procedural interface to cell values. If -usecommand is true, this command will be used instead of any reference to the -variable array. When retrieving cell values, the return value of the command is used as the value for the cell. It uses the %-substition model described in COMMAND SUBSTITUTION below.
А в линуксовом /usr/lib/Tktable2.10/tktable.py кусок инициализации выглядит так:
variable=var,
usecommand=0,
command=test_cmd)

Т.е. возможность привязки метода вместо массива в Tcl есть.
warpson
Вообще, все эти “command” нам безразличны - пусть массив берётся из variable.

Главное в том, чтобы существовала привязка к python-методу при обработке некоторых событий в tktable.
Т.е. “update/delete/insert” и т.п. (включая наполнение) должны вызывать обработку на питоне.

Вывод о tktable:
- либо он будет жить своим разумением через tclsql (послав куда подальше питона с его DB API),
- либо в связке с питоном он может показывать тока статические таблички типа “цены на дрова в Архангельске в 1918 г.”

Всё это склоняет в сторону выбора Qt с его заморочками для табличного редактора внешних sql-данных.

P.S. Посмотрел модель QSqlTable—QTableView и нашел её вполне продуманной.
Особо понравилось QSqRelationallTable - это подход профессионалов.
И нет никаких заморочек - это особенности SQL as is .

К чертям все эти детские tktable (и wxWidgets с их odbc c Gtk впридачу)
Только PyQt + QSql в рамках DB API 2.0 !
Андрей Светлов
А когда QSql стал DB API 2 совместимым?
Subideal Ox
warpson
К чертям все эти детские tktable (и wxWidgets с их odbc c Gtk впридачу)
Что так? Мы не привыкли отступать:

 
#!/usr/bin/python
# -*- encoding: UTF-8 -*-

from Tkinter import *

class Cell(Entry):
def __init__(self, parent):
self.value = StringVar()
Entry.__init__(self, parent, textvariable = self.value)

class Table(Frame):
def __init__(self, parent, columns = 4, rows = 10):
Frame.__init__(self, parent)
self.cells = [[Cell(self) for i in range(columns)] for j in range(rows)]
[self.cells[i][j].grid(row = i, column = j) for i in range(rows) for j in range(columns)]

if __name__ == '__main__':
root = Tk()
tab = Table(root)
tab.pack()
tab.cells[1][1].value.set('test')
tab.cells[2][2].value.set( tab.cells[1][1].value.get() )

root.mainloop()
vito-Z80
Subideal Ox
Подскажите как сохранить введенные данные в переменных для дальнейшего загона их в БД ?
А лучше по нажатию Enter после введения одного значения в любой области таблицы ?
4kpt_III
vito-Z80

Тут же по tkinter вопрос. Это другой вообще GUI.

Сохраняется в tkinter просто. На событие Return вешается функция callback в которой узнается положение курсора в таблице - получаются данные и сохраняются данные в БД…
vito-Z80
4kpt_III
Тут же по tkinter вопрос. Это другой вообще GUI.

Сохраняется в tkinter просто. На событие Return вешается функция callback в которой узнается положение курсора в таблице - получаются данные и сохраняются данные в БД…

Я понял что другая библиотека, мне без разницы, лишь бы работало как у меня на скрине, то есть в таблице должны быть:
1) не активные элементы
2) активные ссылки ( не кнопки) - события
3) область ввода данных (эти данные и должны быть отняты от не активного элемента и загнаны в БД при нажатии Enter)

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB