Форум сайта python.su
Получаю ошибку при запуске программы: TypeError: get_data_plot() missing 1 required positional argument: ‘timespan’. Я так понимаю интерпретатор хочет от меня получить на вход переменную timespan??? Но так не работает
import sys
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout, QHBoxLayout, QLineEdit
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt
from datetime import datetime
import requests
class MainWindow(QDialog):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.init_main()
def init_main(self):
self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)
self.btn_timespan_1_year = QPushButton('1 год')
self.btn_timespan_1_year.clicked.connect(lambda: self.get_data_plot('1year'))
self.btn_timespan_3_years = QPushButton('3 года')
self.btn_timespan_3_years.clicked.connect(lambda: self.get_data_plot('3year'))
self.btn_plot = QPushButton('Построить график')
self.btn_plot.clicked.connect(self.plot)
vertical_layout = QVBoxLayout()
horizontal_layout = QHBoxLayout()
horizontal_layout.addWidget(self.btn_timespan_1_year)
horizontal_layout.addWidget(self.btn_timespan_3_years)
horizontal_layout.addWidget(self.btn_plot)
vertical_layout.addLayout(horizontal_layout)
vertical_layout.addWidget(self.canvas)
self.setLayout(vertical_layout)
def get_data_plot(self, timespan):
url = 'https://api.blockchain.info/charts/market-price'
params = {'timespan': '', 'rollingAverage': '8hours', 'format': 'json'}
params['timespan'] = timespan
response = requests.get(url, params=params)
data = response.json()
return data
def data_plot(self):
data = self.get_data_plot()
x_list = []
y_list = []
for item in data["values"]:
x_list.append(datetime.utcfromtimestamp(item['x']))
y_list.append(item['y'])
return x_list, y_list
def plot(self):
self.figure.clear()
ax = self.figure.add_subplot(111)
plt.title('График рыночной стоимости Bitcoin', fontsize=14, fontweight='bold', color='blue')
plt.xlabel('Период, год', fontsize=12, color='black')
plt.ylabel('Рыночная стоимость, $', fontsize=12, color='black')
ax.grid()
ax.plot(*self.data_plot(), label="Рыночная цена")
ax.legend()
self.canvas.draw()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainWindow()
main.resize(1280, 720)
main.show()
Отредактировано Feelgood (Март 20, 2021 20:56:40)
Офлайн
Исправил в двух функциях:
def get_data_plot(self, timespan): url = 'https://api.blockchain.info/charts/market-price' params = {'timespan': timespan, 'rollingAverage': '8hours', 'format': 'json'} # <—— 'timespan': timespan # params['timespan'] = timespan # лишнее response = requests.get(url, params=params) self.data = response.json() #данные сохранять в переменной класса # return data #не надо "впихивать" данные в кнопки def data_plot(self): # data = self.get_data_plot() #данные есть в self.data x_list = [] y_list = [] for item in self.data["values"]: # <—— self.data["values"] x_list.append(datetime.utcfromtimestamp(item['x'])) y_list.append(item['y']) return x_list, y_list
sys.exit(app.exec_())
Офлайн