Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQT + matplotlib. Растягивание графика [RSS Feed]

#1 Июль 7, 2009 19:04:45

voltron
От:
Зарегистрирован: 2009-04-23
Сообщения: 31
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQT + matplotlib. Растягивание графика

Потребовалось выводить разные графики. Почитал форум, нашел тему про 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()
Этот код отвечает за создание диалогового окна и основной функционал плагина, сам вызов окна делается в другом месте. Если необходимо, готов предоставить полный код.



Офлайн

#2 Июль 7, 2009 23:13:57

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT + matplotlib. Растягивание графика

Попробуй переопределить у QWidget метод resizeEvent(), который будет подгонять размеры графика внутри QWidget.



Офлайн

#3 Июль 27, 2009 15:28:39

voltron
От:
Зарегистрирован: 2009-04-23
Сообщения: 31
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQT + matplotlib. Растягивание графика

Вопрос решен. Нужно внутри виджета 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-менеджеров (горизонтальный, вертикальный…)



Офлайн

  • Начало
  • » GUI
  • » PyQT + matplotlib. Растягивание графика[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version