python - finplot 作为布局中的小部件

标签 python python-3.x pyqt5 pyqtgraph

我正在尝试添加 finplot , https://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()

关于python - finplot 作为布局中的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64074217/

相关文章:

python - 如何在 M1 arm64 架构上安装 PyQt5?

python - PyQt 在处理事件时避免陷入无限循环

python - MX 记录查找和检查

python - Python 中的简洁异常处理

python - Pandas :get_dummies 与分类

python-3.x - 如何根据特定条件替换 Pandas Dataframe 中特定列的特定值?

python - Python 的内积

python - 删除 pandas 中的 html 标签

Python:分离模块中的异常工作错误

python - 将滚动条添加到选项卡 PYQT5