Моя панель поиска крайне неэффективна, я использую виджет записи tkinter и метод трассировки StringVar для вызова функции, когда пользователь что-то печатает.
Проблема в том, что панель поиска очень медленная, поскольку она выполняет вызов API и ожидает ответа, который может занять около 200 мс и прервать пользователя, вводящего запрос поиска.
Есть ли способ разделить функции, чтобы при вводе пользователем, например, символа, следующий символ не задерживался функцией, ожидающей возврата данных?
Я видел несколько примеров, но я не могу применить их в своем коде, таких как многопоточность.
Вот соответствующая часть кода.
def searchfocus(self, event):
self.searchInput = StringVar()
self.searchInput.trace("w", lambda *args: self.searchlive(self.searchInput.get()))
self.searchEntry = Entry(self.searchcanvas, bg="#f4f4f4", highlightthickness=0, bd=0,
font = "Arial 16", fg='#434343', textvariable=self.searchInput)
self.searchEntry.focus_set()
def searchlive(self, livesearch):
api_key=xxxxxxxxxxxx
url_request = 'https://www.alphavantage.co/query?function=SYMBOL_SEARCH&keywords=%s&apikey='+api_key
print(url_request % livesearch)
r = requests.get(url_request % livesearch)
data = r.json()
retList = data['bestMatches']