Я новичок как в питоне, так и в программировании вообще. Мой пробег 3 месяца

Решил попробовать знания на практике и написать простую программку. Суть ее проста - показать текущее состояние задач, поставленных перед сотрудниками отдела. (Скрин прилепил)
Никак не получается заставить отфильтровать записи, то есть запускаем прогу и видим таблицу на 1000 строк. В строку вводим, например, фамилию ответственного, нажимаем кнопку и в таблице остаются только задачи указанного сотрудника. Если мы оставляем поле пустым и жмем кнопку - отображаются снова все записи. Много способов перепробовал, но даже если этот код запускается, то фильтрация не работает.
Не совсем понимаю, как можно из конструкции
Button(somewin, text="sometxt", command=somecomm)
Собственно кодище:
from tkinter import * from queries import createCommand from queries import searchText from tkinter.ttk import * import sqlite3 import os import datetime def search(mainWindow): queryForm = Frame(mainWindow) labelForm = Frame(queryForm) entryForm = Frame(queryForm) queryForm.pack(side=TOP, fill=X) labelForm.pack(side=LEFT) entryForm.pack(side=LEFT, expand=YES, fill=X) lab = Label(labelForm, text="Поиск", width=6) ent = Entry(entryForm) lab.pack(side=TOP) ent.pack(side=TOP, expand=YES, fill=X) var = StringVar() ent.config(textvariable=var) return var def fetch(var): return var.get() #print("Input :::", var.get()) def close(mainWindow): pass def table(mainWindow, heads, sqlCommand): tableForm = Frame(mainWindow) tableForm.pack(side=TOP) table = Treeview(tableForm, show="headings", selectmode="browse", height=12) table["columns"]=heads table["displaycolumns"]=heads table.heading("id", text="ID", anchor=CENTER) table.heading("task", text="Задача", anchor=CENTER) table.heading("subtask", text="Подзадача", anchor=CENTER) table.heading("person", text="Сотрудник", anchor=CENTER) table.heading("date", text="Дата", anchor=CENTER) table.heading("status", text="Статус", anchor=CENTER) table.heading("comment", text="Коммент", anchor=CENTER) table.heading("currstat", text="Тек. статус", anchor=CENTER) table.heading("dayrem", text="Осталось", anchor=CENTER) table.column("id", stretch=0, width=30) table.column("task", stretch=0, width=70) table.column("subtask", stretch=0, width=170) table.column("person", stretch=0, width=70) table.column("date", stretch=0, width=70) table.column("status", stretch=0, width=70) table.column("comment", stretch=0, width=70) table.column("currstat", stretch=0, width=70) table.column("dayrem", stretch=0, width=70) cursor.execute(sqlCommand) # Здесь result = cursor.fetchall() for i in result: table.insert('', END, values=(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], i[8])) scrolltable = Scrollbar(tableForm, command=table.yview) table.configure(yscrollcommand=scrolltable.set) table.pack(side=LEFT, expand=YES, fill=BOTH) scrolltable.pack(side=LEFT, expand=YES, fill=Y) def showRecords(keyword): if keyword == None: sqlCommand = ("SELECT * FROM tasks") else: sqlCommand = searchText.format(kword=keyword) return sqlCommand heads=('id', 'task', 'subtask', 'person', 'date', 'status', 'comment', 'currstat', 'dayrem') #headsru=('ID', "Задача", "Подзадача", "Сотрудник", "Дата", "Статус", "Коммент", "Тек. статус", "Осталось") dbpath = os.path.join(os.getenv('HOMEDRIVE'), os.getenv('HOMEPATH'), 'documents\\Tasker') if not os.path.exists(dbpath): os.mkdir(dbpath) #dbfile = (dbpath + os.sep + 'tasker.db') dbfile='D:\\GDrive\\python\\pysql\\bases\\tasker.db' # Временная база connection = sqlite3.connect(dbfile) cursor = connection.cursor() try: cursor.execute(createCommand) except sqlite3.OperationalError: pass ### SELFTESTING ### mainWindow = Tk() mainWindow.title("Tasker 0.1") mainWindow.geometry("720x400") var = search(mainWindow) btn = Button(mainWindow, text="Найти", command=lambda: fetch(var)).pack() # жмем на кнопочку showRecords(keyword=var.get()) # значение попадает сюда и тут формируется комманда sql table(mainWindow, heads, sqlCommand) # таблица заполняется отфильтрованными значениями mainWindow.mainloop()
Содержимое файла queries:
createCommand = """ CREATE TABLE tasks ( id INTEGER PRIMARY KEY, task NVARCHAR(1000), subtask NVARCHAR(1000), person NVARCHAR(50), date DATE, status NVARCHAR(200), comment NVARCHAR(1000), currstat NVARCHAR(30), dayremain INTEGER );""" searchText = """ SELECT * FROM tasks WHERE task = "{kword}" OR subtask = "{kword}" OR person = "{kword}" OR currstat = "{kword}";"""