|
Корректировка ячейки в таблице и сортировка данных в Phyton 3.81 (Питоне)
Часто бывает необходимо откорректировать одну ячейку из множества полей таблицы.
Добавляем к циклу для вывода таблицы на рис.2 еще 2 строки для доступа к ячейкам:
for row in rows:
item=tree.insert("", END, values=row)
tree.item(item,tags=item)#item() доступ к ячейкам
tree.bind('<1>', edit_cell)
с помощью левой клавиши и с помощью функции edit_cell ячейки открываются для редактирования. После редактирования необходимо нажать на Enter для закрепления и для возможности перехода к другим строкам и ячейкам таблицы. для корректиовки ячейки необходимо подвести к ней курсор и нажать на левую клавишу. Нельзя в режиме редактирования ячейки делать другие операции.
Ниже приводится текст функции edit_cell:
def edit_cell(event): #корректировка ячейки
if tree.identify_region(event.x, event.y) != 'heading':# сортировка по заголовку
#портится, если нет условия (корректирует заголовок)
# the user clicked on a cell
def ok(event):
"""Change item value."""
tree.set(item, column, entry.get())#из ячейки после корректировки по координам заносится значение в ветвь #дерева
entry.destroy() #закрывается окно ячейки
slovar= tree.set(item)#Создается словарь-имя поля:значение
zdescription=slovar['description'];zcosts=slovar['costs'] #заносятся из словаря значения во вспомогательные #переменные
ztotal=slovar['total']
c.execute('''UPDATE finance SET description=?, costs=?, total=? WHERE ID=?''',
(zdescription,zcosts, ztotal, tree.set(tree.selection()[0], '#1'))) #заменяет все поля, в том числе #откорректированные
column = tree.identify_column(event.x) # identify column
item = tree.identify_row(event.y)#Возвращает идентификатор элемента в позиции y.
x, y, width, height = tree.bbox(item, column)
#bbox(item, column=None)
#Возвращает ограничивающую рамку (относительно окна виджета treeview) указанного
#элемента в форме (x, y, width, height).
value = tree.set(item, column)#получает значение корректируемой ячейки
entry = ttk.Entry(tree) # create edition entry
entry.place(x=x, y=y, width=width, height=height,anchor='nw')
# display entry on top of cell отображение записи в верхней части ячейки
entry.insert(0, value) # put former value in entry помещается прежнее значение в enter
entry.bind('<FocusOut>', lambda e: entry.destroy())
entry.bind('<Return>', ok) # validate with Enter подтвердите ввод
|
Сортировка данных по сумме и наименованию в таблице в Питоне (Phyton)
Если необходимо сортировать данные по алфавиту или по увеличению значений в столбце. Для этого необходимо нажать левую клавишу на заголовок столбца. Для этого в описании заголовков столбцов вызовем две функции-sort_naim(0) и sort_tot() , которые используют функцию sort(), которая сортирует по логике:
def sort_naim():
global naim,tot #чтобы были доступны в функции sort()
naim=1;tot=0;sort()
def sort_tot():
global naim,tot
tot=1;naim=0;sort()
def sort(): #сортировка столбцов
global naim,tot
for i in tree.get_children(): # очищаем предыдущюю информацию
tree.delete(i)
if naim==1: c.execute('''select * from finance order by description ''')
if tot==1: c.execute('''select * from finance order by total ''')
rows = c.fetchall()
for row in rows:
tree.insert("", END, values=row)
tree.pack() |
Ниже привожу полный текст скрипта:
При разработке программы я ориентировалась на уроки по ссылке:https://youtu.be/d7wZeAhn7B0
Советую посетить эти уроки. Там решались проблемы при работе с таблицами с использованием объектно-ориентированного программирования.
|
|