Ответ: Ваш скрипт не вызывает paintQuote
более одного раза. Добавьте туда строки для печати, и вы увидите, что он никогда не вызывает их более одного раза.
Предлагаемые решения: Я мало что знаю об этой reactor
или loopingCall
вещи или о том, как она работает. Более простое решение - просто использовать некоторое время l oop со сном в нем. Вот мое решение, которое, кажется, работает хорошо:
import PySimpleGUI as sg
from alpha_vantage.timeseries import TimeSeries
import time
sg.theme('BluePurple')
layout = [[sg.Text('Last Price', size=(20, 2), justification='center')],
[sg.Text('', size=(10, 2), font=('Helvetica', 20),
justification='center', key='quote')]]
window = sg.Window('MikeQuote', layout)
av = TimeSeries(key = 'key')
spy, _ = av.get_quote_endpoint(symbol='SPY')
last = spy['05. price']
yest = spy['08. previous close']
wait = 1 # Wait is in seconds
while True:
event, values = window.read(timeout=10)
if event in (None, 'Quit'):
break
spy, _ = av.get_quote_endpoint(symbol='SPY')
last = spy['05. price']
window['quote'].update(last)
time.sleep(wait)
Я добавил несколько настроек, в том числе:
Вызов только конечной точки "GLOBAL_QUOTE" (так что вы не возвращает весь массивный внутридневной набор данных)
Удалить пакет twisted
для простого времени l oop с функцией time.sleep
.
Добавлено событие «Выход», чтобы оно фактически останавливалось при закрытии окна.
Удалена функция paintQuote()
. Я думаю, что в чистом коде в идеале эта функция не должна быть удалена, но вы можете добавить ее обратно так, как вам нравится.
Удалена интеграция pandas. Вы не имеете дело с большими манипуляциями с данными, поэтому проще и быстрее использовать формат JSON.