Найти - Пользователи
Полная версия: PyQT + matplotlib. Растягивание графика
Начало » GUI » PyQT + matplotlib. Растягивание графика
1
voltron
Потребовалось выводить разные графики. Почитал форум, нашел тему про matplotlib, скачал и попробовал. Для моих задач самое то. Встроить графики в интерфейс на PyQT получилось, не могу добиться только одного: чтобы при ресайзе окна, график тоже менял свои размеры. График выводится на QWidget, который сам по себе отлично растягивается при изменении размеров окна. А вот график свои рамеры сохраняет. Немного усложняет ситуацию и то, что это не самостоятельное приложение, а плагин к QGIS.

Первым делом посмотрел пример из комплекта matplotlib - embendding_in_qt_4 там все растягивается при изменении размеров окна. Насколько понял из кода все дело в том, что задается нужный sizePolicy для канвы графика. Попробовал сделать у себя по такому же принципу - не работает, код транслируется без проблем, но график при изменении размеров окна свои размеры все равно не меняет. Привожу фрагмент кода, может кто-то подскажет в чем может быть проблема.
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
import os, math

from frmStatist import Ui_dlgStatistics

import utils

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

import resources

class dlgStatist( QDialog, Ui_dlgStatistics ):
def __init__( self, iface ):
QDialog.__init__( self )
self.iface = iface
self.setupUi( self )

# prepare figure
self.figure = Figure()
self.figure.set_figsize_inches( ( 4.3, 4.2 ) )
self.axes = self.figure.add_subplot( 111 )
self.figure.suptitle( "Frequency distribution", fontsize = 12 )
self.axes.grid( True )
sp = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.canvas = FigureCanvas( self.figure )
self.canvas.setParent( self.widgetPlot )
self.canvas.setSizePolicy(sp)
self.canvas.updateGeometry()
Этот код отвечает за создание диалогового окна и основной функционал плагина, сам вызов окна делается в другом месте. Если необходимо, готов предоставить полный код.
pasaranax
Попробуй переопределить у QWidget метод resizeEvent(), который будет подгонять размеры графика внутри QWidget.
voltron
Вопрос решен. Нужно внутри виджета QWidget разместить Layout, а уже на нем создавать график matplotlib. Тогда все будет работать как надо. Вот кусок кода
class dlgStatist( QDialog, Ui_dlgStatistics ):
def __init__( self, iface ):
QDialog.__init__( self )
self.iface = iface
self.setupUi( self )

# prepare figure
self.figure = Figure()
self.axes = self.figure.add_subplot( 111 )
self.canvas = FigureCanvas( self.figure )
self.layoutPlot.addWidget( self.canvas )
self.layoutPlot - это какой-либо из Layout-менеджеров (горизонтальный, вертикальный…)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB