簡體   English   中英

finplot 作為布局中的小部件

[英]finplot as a widget in layout

我正在嘗試將finplothttps://pypi.org/project/finplot/作為小部件添加到我的 UI 中的布局之一。 我為finplot創建了一個小部件並將其添加到布局中的小部件中,但出現以下錯誤:

self.tab1.layout.addWidget(self.tab1.fplt_widget)
TypeError: addWidget(self, QWidget, stretch: int = 0, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = Qt.Alignment()): argument 1 has unexpected type 'PlotItem'

這是我使用的代碼。

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


# Creating the main window
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.tab_widget = MyTabWidget(self)
        self.setCentralWidget(self.tab_widget)

        self.show()

    # Creating tab widgets


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

        # Initialize tab screen
        self.tabs = QTabWidget()
        self.tabs.setTabPosition(QTabWidget.East)
        self.tabs.setMovable(True)

        self.tab1 = QWidget()

        self.tabs.resize(600, 400)

        # Add tabs
        self.tabs.addTab(self.tab1, "tab1")


        self.tab1.layout = QVBoxLayout(self)
        self.tab1.label = QLabel("AAPL")
        self.tab1.df = yfinance.download('AAPL')
        self.tab1.fplt_widget = fplt.create_plot_widget(self.window())
        fplt.candlestick_ochl(self.tab1.df[['Open', 'Close', 'High', 'Low']])
        self.tab1.layout.addWidget(self.tab1.label)
        self.tab1.layout.addWidget(self.tab1.fplt_widget)
        self.tab1.setLayout(self.tab1.layout)

        # Add tabs to widget
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)


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

要添加小部件,請使用您創建的軸的小部件成員,如下所示:

self.tab1.layout.addWidget(self.tab1.fplt_widget.ax_widget)
self.window().axs = [self.tab1.fplt_widget] # required property of window

要讓窗口在顯示時正確縮放 X 軸,請在此處調用show()

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

create_plot_widget()函數創建了一個無法添加到布局中的PlotItem ,解決方案是使用一些 QWidget 可以將PlotItem的內容顯示為PlotWidget

import pyqtgraph as pg

# ...

self.tab1.df = yfinance.download("AAPL")
self.tab1.fplt_widget = pg.PlotWidget( plotItem=fplt.create_plot_widget(self.window())
)
fplt.candlestick_ochl(self.tab1.df[["Open", "Close", "High", "Low"]])

設法使它工作

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

# Creating the main window
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.tab_widget = MyTabWidget(self)
        self.setCentralWidget(self.tab_widget)

        # Insert policies
       
        fplt.refresh()
        self.show()

    # Creating tab widgets


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

        # Initialize tab screen
        self.tabs = QTabWidget()
        self.tabs.setTabPosition(QTabWidget.East)
        self.tabs.setMovable(True)

        self.tab1 = QWidget()

        self.tabs.resize(600, 400)

        # Add tabs
        self.tabs.addTab(self.tab1, "tab1")
        self.tab1.layout = QVBoxLayout(self)
        self.tab1.label = QLabel("AAPL")

        # finplot
        self.tab1.df = yfinance.download("AAPL")
        self.tab1.fplt_widget = pg.PlotWidget(
            plotItem=fplt.create_plot_widget(self.window())
        )
        fplt.candlestick_ochl(self.tab1.df[["Open", "Close", "High", "Low"]])
        self.tab1.layout.addWidget(self.tab1.fplt_widget)
        self.window().axs = [self.tab1.fplt_widget.plotItem]


        self.tab1.setLayout(self.tab1.layout)
        # Add tabs to widget
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)



if __name__ == '__main__':
    app = QApplication([])
    ex = App()
    sys.exit(app.exec_())


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM