В выпадающем списке Tkinter рекомендуются результаты с очень медленным запросом API - PullRequest
0 голосов
/ 08 ноября 2018

Моя панель поиска крайне неэффективна, я использую виджет записи 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']
...