es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PyQt6 / finplot – ¿Problema de compatibilidad? (problema aislado en un código pequeño y ejecutable)

Mi cabeza está girando de intentar hacer que finplot cree un gráfico incrustado durante días sin éxito. Decidí reiniciar desde lo básico.

El código que incluí funciona tal cual. Sin embargo, si cambio la importación a PyQt6 en lugar de PyQt5, deja de funcionar.

La aplicación en la que estoy tratando de integrar esto está hecha completamente en PyQt6. finplot funciona y se muestra externamente en mis intentos con PyQt6, pero no puedo usar fplt.create_plot_widget pasando self.window() con PyQt6, parece ser.

Sinceramente, siempre tengo problemas cada vez que intento usar pyqtgraph. Me desvié para hacer algo ingenioso con mplfinance, pero estoy de vuelta donde estaba hace 6 meses tratando de hacer que cualquier cosa relacionada con gráficos y Qt aparezca correctamente en un diseño con otros widgets :/

Cualquier ayuda es apreciada. Gracias.

import sys
import finplot as fplt
from PyQt5.QtWidgets import *
import yfinance

class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 - QTabWidget'
        self.left = 0
        self.top = 0
        self.width = 600
        self.height = 400
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.menu = self.menuBar()

        self.widget = MyGraphWidget(self)
        self.setCentralWidget(self.widget)

        fplt.show(qt_exec=False)
        self.show()

class MyGraphWidget(QWidget):
    def __init__(self, parent):
        super(QWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)

        self.resize(600, 400)
        self.label = QLabel("AAPL")
        self.df = yfinance.download('AAPL')
        self.fplt_widget1, self.fplt_widget2 = fplt.create_plot_widget(self.window(), rows=2)
        fplt.candlestick_ochl(self.df[['Open', 'Close', 'High', 'Low']])

        self.layout.addWidget(self.label)
        self.window().axs = [self.fplt_widget1]
        self.layout.addWidget(self.fplt_widget1.ax_widget)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec())
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema que estás enfrentando está relacionado con la compatibilidad entre PyQt5 y PyQt6. Mientras que el código funciona con PyQt5, falla con PyQt6. Has mencionado que finplot funciona y se muestra externamente en tus intentos con PyQt6, pero no puedes usar fplt.create_plot_widget mientras pasas self.window() con PyQt6.

    Una posible solución podría ser verificar si finplot ha agregado soporte para PyQt6. Si no es así, es posible que desees considerar el uso de una biblioteca alternativa compatible con PyQt6, como pyqtgraph o matplotlib.

    Además, te recomendaría revisar la documentación y ejemplos proporcionados por la biblioteca que elijas usar, ya que pueden ayudarte a integrar correctamente gráficos y otros widgets con PyQt6.

Comments are closed.