Форум сайта python.su
Добрый день.
Как передать значения x_list, y_list из функции get_data_plot в функцию plot, внутри одного класса, чтоб построить график??
import sys from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout 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.figure = plt.figure() # Canvas Widget отображающий `figure` # он принимает экземпляр `figure` в качестве параметра __init__ self.canvas = FigureCanvas(self.figure) # кнопка вызова функции построения графика self.button = QPushButton('Построить график') self.button.clicked.connect(self.plot(*self.get_data_plot())) # создаем вертикальный контейнер и помещаем виджеты layout = QVBoxLayout() layout.addWidget(self.canvas) layout.addWidget(self.button) self.setLayout(layout) def get_data_plot(self): # запрос и получение данных через API blockchain.com url = 'https://api.blockchain.info/charts/market-price' params = {'timespan': '10year', 'rollingAverage': '8hours', 'format': 'json'} response = requests.get(url, params=params) data = response.json() # чтение данных из JSON файла #with open('market_price.json') as file: #data = json.load(file) 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, x_list, y_list): # создание координатной плоскости ax = self.figure.add_subplot(111) # построение линейного графика ax.plot(x_list, y_list) # обновляем canvas self.canvas.draw() if __name__ == '__main__': app = QApplication(sys.argv) main = MainWindow() main.show() sys.exit(app.exec_())
Отредактировано Feelgood (Март 18, 2021 19:57:19)
Офлайн
obj.plot(*obj.get_data_plot())
Офлайн
doza_andа где вызывать??
obj.plot(*obj.get_data_plot())
main.plot(*main.get_data_plot())
main = MainWindow()
Отредактировано Feelgood (Март 18, 2021 19:52:30)
Офлайн
Feelgoodну откуда ж нам знать, в вашем коде нет вызова plot(). Там где вы вызываете self.plot(x_lst, y_lst) заменить на self.plot(*self.get_data_plot())
а где вызывать??
[code python][/code]
Офлайн
PEHDOM
добавил код целиком в первый пост, подскажите пожалуйста
Офлайн
Feelgoodне ну так оно не сработает, от слова совем. Сигналы в ПайКуТе чутка по другому работает.
добавил код целиком в первый пост, подскажите пожалуйста
self.button.clicked.connect(lambda: self.plot(*self.get_data_plot()))
[code python][/code]
Отредактировано PEHDOM (Март 18, 2021 20:14:34)
Офлайн
PEHDOMк сожалению в данном варианте ошибка
Типа ax.plot(*self.get_data_plot())
TypeError: plot() missing 1 required positional argument: 'y_list'
self.button.clicked.connect(lambda: self.plot(*self.get_data_plot()))
Офлайн
а просто на вход функции d
ef plot(self):
Офлайн
PEHDOM
Спасибо!
Офлайн
Вот итоговый код, может кто-то сделать код ревью??
import sys from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout 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.figure = plt.figure() # Canvas Widget отображающий `figure` # он принимает экземпляр `figure` в качестве параметра __init__ self.canvas = FigureCanvas(self.figure) # кнопка вызова функции построения графика self.button = QPushButton('Построить график') self.button.clicked.connect(self.plot) # создаем вертикальный контейнер и помещаем виджеты layout = QVBoxLayout() layout.addWidget(self.canvas) layout.addWidget(self.button) self.setLayout(layout) # функция получения данных через API def get_data_plot(self): # запрос и получение данных через API blockchain.com url = 'https://api.blockchain.info/charts/market-price' params = {'timespan': '10year', 'rollingAverage': '8hours', 'format': 'json'} response = requests.get(url, params=params) data = response.json() # чтение данных из JSON файла #with open('market_price.json') as file: #data = json.load(file) 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): # создание координатной плоскости ax = self.figure.add_subplot(111) # построение линейного графика ax.plot(*self.get_data_plot()) # обновляем canvas self.canvas.draw() if __name__ == '__main__': app = QApplication(sys.argv) main = MainWindow() main.show() sys.exit(app.exec_())
Отредактировано Feelgood (Март 18, 2021 20:45:47)
Офлайн