finplot 作为布局中的小部件
finplot as a widget in layout
我正在尝试将 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_())
create_plot_widget()
函数创建一个 PlotItem
that cannot be added to a layout, the solution is to use some QWidget that can display the content of the PlotItem
as the PlotWidget
:
import pyqtgraph as pg
# ...
self.tab1.df = yfinance.download("AAPL")
self.tab1.fplt_widget = <b>pg.PlotWidget(
plotItem=</b>fplt.create_plot_widget(self.window()<b>)</b>
)
fplt.candlestick_ochl(self.tab1.df[["Open", "Close", "High", "Low"]])
要添加一个小部件,您可以使用您创建的轴的小部件成员,如下所示:
self.tab1.layout.addWidget(self.tab1.fplt_widget<b>.ax_widget</b>)
self.window().axs = [self.tab1.fplt_widget] # required property of window
要使 window 正确缩放 X-axis,请在此处调用 show()
:
self.setCentralWidget(self.tab_widget)
<b>fplt.show(qt_exec=False)</b>
self.show()
我正在尝试将 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_())
create_plot_widget()
函数创建一个 PlotItem
that cannot be added to a layout, the solution is to use some QWidget that can display the content of the PlotItem
as the PlotWidget
:
import pyqtgraph as pg
# ...
self.tab1.df = yfinance.download("AAPL")
self.tab1.fplt_widget = <b>pg.PlotWidget(
plotItem=</b>fplt.create_plot_widget(self.window()<b>)</b>
)
fplt.candlestick_ochl(self.tab1.df[["Open", "Close", "High", "Low"]])
要添加一个小部件,您可以使用您创建的轴的小部件成员,如下所示:
self.tab1.layout.addWidget(self.tab1.fplt_widget<b>.ax_widget</b>)
self.window().axs = [self.tab1.fplt_widget] # required property of window
要使 window 正确缩放 X-axis,请在此处调用 show()
:
self.setCentralWidget(self.tab_widget)
<b>fplt.show(qt_exec=False)</b>
self.show()