PyQt5 figurecanvas 不拉伸

Posted

技术标签:

【中文标题】PyQt5 figurecanvas 不拉伸【英文标题】:PyQt5 figure canvas doesnt stretch 【发布时间】:2022-01-18 04:01:54 【问题描述】:

问题是我的 FigureCanvas 没有采用所有可能的高度,它只是调整它的宽度。调整主窗口大小后会出现此问题。我想让画布占据最大可用高度。

这就是现在的样子

这是最小的可重现示例:

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_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from PyQt5.QtWidgets import *
import matplotlib
from matplotlib import pyplot as plt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Distributions")
        self.setMinimumSize(480, 320)

        # Layout
        mainLayout = QVBoxLayout()
        dirLayout = QHBoxLayout()
        radioLayout = QHBoxLayout()
        canvasLayout = QVBoxLayout()

        # Setting main Widget
        self.mainWidget = QWidget()
        self.setCentralWidget(self.mainWidget)
        self.mainWidget.setLayout(mainLayout)
 

        # Setting canvas to plot
        mainLayout.addLayout(canvasLayout)
        figure = plt.figure()
        canvas = FigureCanvas(figure)

        toolbar = NavigationToolbar(canvas, self)
        canvasLayout.addWidget(toolbar)
        canvasLayout.addWidget(canvas)
        
        plotButton = QPushButton('Plot')
        canvasLayout.addWidget(plotButton, 
        alignment=QtCore.Qt.AlignCenter)
        plotButton.setMaximumSize(QSize(80, 60))
        
app = QApplication(sys.argv)
dialogi = MainWindow()
dialogi.show()
sys.exit(app.exec_())

【问题讨论】:

尝试删除canvasLayout.setAlignment(Qt.AlignCenter),否则请提供minimal reproducible example。 它不起作用。我添加了重现问题的整个代码 @DamianRecruit 您提供的代码没有生成您指示的图像,我得到:i.imgur.com/5JsT0H7.png @eyllanesc 只要您不调整窗口大小就可以。很抱歉 @DamianRecruit 看来你还没有理解我,在你的图像中你显示了 QRadioButton 但在你的代码中却没有它的踪迹,我的 DV。 【参考方案1】:

您必须在将小部件添加到布局时设置拉伸因子:

canvasLayout.addWidget(canvas, stretch=1)

【讨论】:

非常感谢你让你觉得“被骗”了,很抱歉

以上是关于PyQt5 figurecanvas 不拉伸的主要内容,如果未能解决你的问题,请参考以下文章

标签文本自动拉伸到它的父 pyqt5

如何在 PyQt5 GUI 中删除一个拉伸?

在 pyqt5 中绘制 Matplotlib 图

PyQt5 QWidget不填充父

PyQt5 - 按钮和标签应具有相同的高度

使用 PyInstaller 后 FigureCanvas 未解释为 QtWidget