Имеется приложение на tkinter. Оно представляет собой окно, на котором нас интересует виджет ttk.treeview. Этот виджет организован как таблица (то есть лишен дочерних строк). В эту таблицу подгружаются данные из БД cqlite3. Когда в базу добавляется новая строка, она не сразу подгружается в таблицу. Приходится закрывать окно и открывать его заново, чтобы всё подгрузилось и можно было работать с новыми строками.
Мой вопрос: как сделать, чтобы данные в таблице обновлялись сразу после добавления в БД новой позиции?
Теперь к конкретике:
Так выглядит окно приложения. Верхняя и нижняя таблица образованы одним классом:
class Table(Frame):
def __init__(self, parent = None, headings = tuple(), rows = tuple(), Table_Data_Class = Table_Data()):
super().__init__(parent)
table = Treeview(self, show="headings", selectmode="browse")
table["columns"] = headings
table["displaycolumns"] = headings
for head in headings:
table.heading(head, text=head, anchor=CENTER)
table.column(head, anchor=CENTER, width=20)
for row in rows:
table.insert('', END, values=tuple(row))
table.bind("<ButtonRelease-1>", lambda event, tree = table: Table_Data_Class.getting_data(event, tree))
scrolltable = Scrollbar(self, command=table.yview)
scrolltable1 = Scrollbar(self, command= table.xview)
table.configure(yscrollcommand=scrolltable.set)
table.configure(xscrollcommand=scrolltable1.set)
scrolltable.pack(side=RIGHT, fill=Y)
scrolltable1.pack(side=BOTTOM, fill=X)
table.pack(expand=YES, fill=BOTH)
Далее в коде они вызываются и переносятся на окно следующим образом:
data = (',')
with sqlite3.connect('data.sqlite') as connection:
cursor = connection.cursor()
cursor.execute("SELECT * FROM active_application WHERE [Вид обслуживания] ='РЕМОНТ'")
data = (row for row in cursor.fetchall())
data1 = (',')
with sqlite3.connect('data.sqlite') as connection:
cursor = connection.cursor()
cursor.execute("SELECT * FROM active_application WHERE [Вид обслуживания] = 'TO'")
data1 = (row for row in cursor.fetchall())
table = Table(root, headings=('Номер заявки', 'Дата заявки', 'Гаражный номер', 'Вид ТС', 'Модель ТС', 'Гос. рег. знак', 'ДЭУ', 'Вид обслуживания', 'Категория обслуживания', 'Описание неисправности'), rows=data, Table_Data_Class = Table_Data_Class)
table.pack ( fill=BOTH, padx=150, pady=80)
table1 = Table(root, headings=('Номер заявки', 'Дата заявки', 'Гаражный номер', 'Вид ТС', 'Модель ТС', 'Гос. рег. знак', 'ДЭУ', 'Вид обслуживания', 'Категория обслуживания'), rows=data1, Table_Data_Class = Table_Data_Class)
table1.pack ( fill=BOTH, padx=150, pady=60)
Примечание: "Table_Data_Class" - это класс, который позволяет мне по щелчку мыши выбирать первую позицию строчки таблицы ( то есть номер заявки)