Как добавить вкладку редактирования matplotlib на морские графики, отображаемые на холсте?

При интеграции графиков в gui и использовании холста мои сюжеты идут без вкладки редактирования внизу графиков, которые я получаю, когда у меня просто есть «plt.show ()». Как я могу добавить нижнюю вкладку редактирования в графике слева на график справа?

Изменить (как только панель инструментов реализована, но все еще есть некоторые проблемы):

Я использую сложный макет для переключения между окнами. две функции, полностью отображаемые ниже, отвечают за окно с выпадающим меню и сюжет и обновляют график при выборе новой опции выпадающего списка.

Панель инструментов основана на https://matplotlib.org/gallery/user_interfaces/embedding_in_qt_sgskip.html (благодаря ImportanceofBeingErnest)

Упрощенный код (может работать сам по себе): import sys

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavToolbar
import seaborn as sns

class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.setWindowTitle("Title Window (not sure)")

        self.stacked_layout = QStackedLayout()
        self.stacked_counter = -1

        self.central_widget = QWidget()
        self.central_widget.setLayout(self.stacked_layout)
        self.setCentralWidget(self.central_widget)

        self.main_window_layout()

    def main_window_layout(self):

        self.bargraph_dropdown_menu_button = QPushButton("Go To Bar Graph DropDown Menu")

        self.main_menu_button_layout = QHBoxLayout()
        self.main_menu_button_layout.addWidget(self.bargraph_dropdown_menu_button)

        self.main_menu_layout = QVBoxLayout()
        self.main_menu_layout.addLayout(self.main_menu_button_layout)

        self.view_main_menu_widget = QWidget()
        self.view_main_menu_widget.setLayout(self.main_menu_layout)

        #connections
        self.bargraph_dropdown_menu_button.clicked.connect(self.dropdown_menu_layout)

        self.stacked_layout.addWidget(self.view_main_menu_widget)
        self.stacked_counter += 1
        self.stacked_layout.setCurrentIndex(self.stacked_counter)


    def dropdown_menu_layout(self):
        self.setMinimumSize(550,350)
        self.setMaximumSize(100000,100000)

        self.homebutton = QPushButton('Back Home')
        self.homebutton.setFixedSize(70,22)

        self.figure = plt.figure(figsize=(15,5))
        self.canvas = FigureCanvas(self.figure)
        def on_resize(event):
            plt.tight_layout()
            self.canvas.draw()
        cid = self.canvas.mpl_connect('resize_event', on_resize)

        self.addToolBar(Qt.BottomToolBarArea, NavToolbar(self.canvas, self))

        sns.set(style="whitegrid")
        plt.cla()
        ax = self.figure.add_subplot(111)
        ax.set_title('Droops and Power System Parameters to Bus Sensitivity', fontweight=1)
        ax.title.set_position([.5, 1.025])
        ax.set_ylabel("Sensitivity", fontweight=1)
        ax.yaxis.labelpad = 15
        plt.tight_layout()
        sns.despine(bottom=False,top=False,left=False,right=False)
        self.canvas.draw()

        self.button_hbox_layout = QHBoxLayout()
        self.button_hbox_layout.addWidget(self.homebutton)
        self.button_hbox_layout.addStretch(1)

        self.dropdown_vbox_layout = QVBoxLayout()
        self.dropdown_vbox_layout.addLayout(self.button_hbox_layout)
        self.dropdown_vbox_layout.addWidget(self.canvas)

        self.view_dropdown_menu_widget = QWidget()
        self.view_dropdown_menu_widget.setLayout(self.dropdown_vbox_layout)

        #connections
        self.homebutton.clicked.connect(self.change_to_main_menu_window)

        self.stacked_layout.addWidget(self.view_dropdown_menu_widget)
        self.stacked_counter += 1
        self.stacked_layout.setCurrentIndex(self.stacked_counter)

    def change_to_main_menu_window(self):
        self.setFixedSize(300,75)
        self.stacked_layout.setCurrentIndex(0)


def main():
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    win.raise_()
    app.exec_()   #sys.exit(app.exec_())

if __name__ == "__main__":
    main()

Главное окно:

введите описание изображения здесь

Нажмите «Graph DropDow ......»:

введите описание изображения здесь

Нажмите «Назад домой» (предполагается, что это будет то же самое, что и Главное окно на первом шаге):

введите описание изображения здесь

python,matplotlib,seaborn,

1

Ответов: 1


2 принят

Ответ на исходный вопрос:

Вы забыли добавить панель навигации в свой графический интерфейс. Например, для PyQt

matplotlib.backends.backend_qt5agg.NavigationToolbar2QT

или для Tk

matplotlib.backends.backend_tkagg.NavigationToolbar2Tk

и т. д. Вы можете ссылаться на примеры на странице matplotlib для всех возможных графических интерфейсов.

Способ добавления панели навигации зависит от используемого GUI, что является секретом в вопросе, но вы узнаете из соответствующего примера.

Ответ на редактируемый вопрос:

Вы добавляете панель навигации в окно, а не в StackedLayout. Поэтому вместо того self.addToolBar(Qt.BottomToolBarArea, NavToolbar(self.canvas, self)), чтобы добавить его в используемый макет,

self.dropdown_vbox_layout.addWidget(NavToolbar(self.canvas, self))
питон, Matplotlib, Сиборн,
Похожие вопросы
Яндекс.Метрика