как можно в PyQt5 менять размер canvas вместе с окном window? - вопрос №5053170

28.01.23
1 ответ

Ответы

Для того чтобы изменять размер canvas в PyQt5 вместе с окном window, можно использовать механизмы компоновки, например, QVBoxLayout и QHBoxLayout.

Пример:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QHBoxLayout, QWidget

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('PyQt5 with Matplotlib')
        self.setGeometry(100, 100, 800, 600)

        # Создаем фигуру
        self.figure = Figure(figsize=(5, 4), dpi=100)

        # Создаем canvas и связываем его с фигурой
        self.canvas = FigureCanvas(self.figure)

        # Создаем виджеты для размещения canvas
        widget = QWidget(self)
        self.setCentralWidget(widget)

        v_box = QVBoxLayout()
        h_box = QHBoxLayout()
        h_box.addWidget(self.canvas)

        v_box.addLayout(h_box)

        # Добавляем виджет с компоновкой на центральный виджет окна
        widget.setLayout(v_box)

    def resizeEvent(self, event):
        super().resizeEvent(event)
        self.canvas.resize(self.width(), self.height())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())


В этом примере мы создаем фигуру и canvas, а затем размещаем canvas на центральном виджете окна с помощью QVBoxLayout и QHBoxLayout. При изменении размера окна, мы переопределяем метод resizeEvent и изменяем размер canvas таким образом, чтобы он занимал всю доступную площадь в окне.

09.04.23

Глеб Черняк

Сейчас на сайте
Читать ответы

Олег Николаевич

Читать ответы

Георгий

Читать ответы
Посмотреть всех экспертов из раздела Технологии
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store