es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La lona de la figura de PyQt5 no se estira.

El problema es que mi FigureCanvas no toma toda la altura posible, solo redimensiona su anchura. El problema ocurre después de redimensionar la ventana principal. Me gustaría permitir que el lienzo tome la altura máxima disponible.

Así es como se ve ahora:

Así es como se ve ahora

Este es un ejemplo mínimo reproducible:

import sys
import os
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtGui import (QPixmap, QPainter, QBrush, QPen, QColor)
from PyQt5.QtCore import *
from matplotlib.backends.backend<em>qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend</em>qt5agg import NavigationToolbar2QT as NavigationToolbar
from PyQt5.QtWidgets import *
import matplotlib
from matplotlib import pyplot as plt


class MainWindow(QMainWindow):
    def <strong>init</strong>(self):
        super().<strong>init</strong>()
        self.setWindowTitle("Distributions")
        self.setMinimumSize(480, 320)

    # Diseño
    mainLayout = QVBoxLayout()
    dirLayout = QHBoxLayout()
    radioLayout = QHBoxLayout()
    canvasLayout = QVBoxLayout()

    # Configurar el widget principal
    self.mainWidget = QWidget()
    self.setCentralWidget(self.mainWidget)
    self.mainWidget.setLayout(mainLayout)

    # Configurar el lienzo para trazar
    mainLayout.addLayout(canvasLayout)
    figura = plt.figure()
    lienzo = FigureCanvas(figura)

    barra_herramientas = NavigationToolbar(lienzo, self)
    canvasLayout.addWidget(barra_herramientas)
    canvasLayout.addWidget(lienzo)

    boton_plot = QPushButton('Graficar')
    canvasLayout.addWidget(boton_plot, 
    alignment=QtCore.Qt.AlignCenter)
    boton_plot.setMaximumSize(QSize(80, 60))

app = QApplication(sys.argv)
dialogo = MainWindow()
dialogo.show()
sys.exit(app.exec_())

“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para permitir que el lienzo ocupe la altura máxima disponible, es necesario modificar el canvasLayout para usar addStretch(1) antes de agregar el widget del lienzo. Esto creará un espacio expansible para empujar el widget del lienzo hacia la altura máxima posible. Aquí está el fragmento de código actualizado:

    # Establecer el lienzo para trazar
    mainLayout.addLayout(canvasLayout)
    figure = plt.figure()
    canvas = FigureCanvas(figure)
    
    toolbar = NavigationToolbar(canvas, self)
    
    canvasLayout.addStretch(1)
    canvasLayout.addWidget(toolbar)
    canvasLayout.addWidget(canvas)
    
    plotButton = QPushButton('Plot')
    canvasLayout.addWidget(plotButton, alignment=QtCore.Qt.AlignCenter)
    plotButton.setMaximumSize(QSize(80, 60))
    

    Esto debería permitir que el widget del lienzo ocupe la altura máxima disponible después de que se redimensione la ventana principal.

Comments are closed.