merged bugfixes

This commit is contained in:
Luke Campagnola 2013-05-29 08:21:10 -04:00
commit af4980d153
5 changed files with 69 additions and 8 deletions

View File

@ -2,10 +2,16 @@ PyQtGraph - A pure-Python graphics library for PyQt/PySide
Copyright 2012 Luke Campagnola, University of North Carolina at Chapel Hill Copyright 2012 Luke Campagnola, University of North Carolina at Chapel Hill
http://www.pyqtgraph.org http://www.pyqtgraph.org
Authors: Maintainer:
Luke Campagnola ('luke.campagnola@%s.com' % 'gmail') Luke Campagnola ('luke.campagnola@%s.com' % 'gmail')
Contributors:
Megan Kratz Megan Kratz
Paul Manis
Ingo Breßler Ingo Breßler
Christian Gavin
Michael Cristopher Hogg
Ulrich Leutner
Requirements: Requirements:
PyQt 4.7+ or PySide PyQt 4.7+ or PySide

View File

@ -40,11 +40,11 @@ class DockArea(Container, QtGui.QWidget, DockDrop):
Arguments: Arguments:
dock The new Dock object to add. If None, then a new Dock will be dock The new Dock object to add. If None, then a new Dock will be
created. created.
position 'bottom', 'top', 'left', 'right', 'over', or 'under' position 'bottom', 'top', 'left', 'right', 'above', or 'below'
relativeTo If relativeTo is None, then the new Dock is added to fill an relativeTo If relativeTo is None, then the new Dock is added to fill an
entire edge of the window. If relativeTo is another Dock, then entire edge of the window. If relativeTo is another Dock, then
the new Dock is placed adjacent to it (or in a tabbed the new Dock is placed adjacent to it (or in a tabbed
configuration for 'over' and 'under'). configuration for 'above' and 'below').
=========== ================================================================= =========== =================================================================
All extra keyword arguments are passed to Dock.__init__() if *dock* is All extra keyword arguments are passed to Dock.__init__() if *dock* is
@ -316,4 +316,4 @@ class DockArea(Container, QtGui.QWidget, DockDrop):
DockDrop.dropEvent(self, *args) DockDrop.dropEvent(self, *args)

View File

@ -47,7 +47,52 @@ class GraphicsWidgetAnchor(object):
self.__parentAnchor = parentPos self.__parentAnchor = parentPos
self.__offset = offset self.__offset = offset
self.__geometryChanged() self.__geometryChanged()
def autoAnchor(self, pos, relative=True):
"""
Set the position of this item relative to its parent by automatically
choosing appropriate anchor settings.
If relative is True, one corner of the item will be anchored to
the appropriate location on the parent with no offset. The anchored
corner will be whichever is closest to the parent's boundary.
If relative is False, one corner of the item will be anchored to the same
corner of the parent, with an absolute offset to achieve the correct
position.
"""
pos = Point(pos)
br = self.mapRectToParent(self.boundingRect()).translated(pos - self.pos())
pbr = self.parentItem().boundingRect()
anchorPos = [0,0]
parentPos = Point()
itemPos = Point()
if abs(br.left() - pbr.left()) < abs(br.right() - pbr.right()):
anchorPos[0] = 0
parentPos[0] = pbr.left()
itemPos[0] = br.left()
else:
anchorPos[0] = 1
parentPos[0] = pbr.right()
itemPos[0] = br.right()
if abs(br.top() - pbr.top()) < abs(br.bottom() - pbr.bottom()):
anchorPos[1] = 0
parentPos[1] = pbr.top()
itemPos[1] = br.top()
else:
anchorPos[1] = 1
parentPos[1] = pbr.bottom()
itemPos[1] = br.bottom()
if relative:
relPos = [(itemPos[0]-pbr.left()) / pbr.width(), (itemPos[1]-pbr.top()) / pbr.height()]
self.anchor(anchorPos, relPos)
else:
offset = itemPos - parentPos
self.anchor(anchorPos, anchorPos, offset)
def __geometryChanged(self): def __geometryChanged(self):
if self.__parent is None: if self.__parent is None:
return return

View File

@ -101,7 +101,6 @@ class LegendItem(GraphicsWidget, GraphicsWidgetAnchor):
label.close() label.close()
self.updateSize() # redraq box self.updateSize() # redraq box
def updateSize(self): def updateSize(self):
if self.size is not None: if self.size is not None:
return return
@ -115,15 +114,22 @@ class LegendItem(GraphicsWidget, GraphicsWidgetAnchor):
#print(width, height) #print(width, height)
#print width, height #print width, height
self.setGeometry(0, 0, width+25, height) self.setGeometry(0, 0, width+25, height)
def boundingRect(self): def boundingRect(self):
return QtCore.QRectF(0, 0, self.width(), self.height()) return QtCore.QRectF(0, 0, self.width(), self.height())
def paint(self, p, *args): def paint(self, p, *args):
p.setPen(fn.mkPen(255,255,255,100)) p.setPen(fn.mkPen(255,255,255,100))
p.setBrush(fn.mkBrush(100,100,100,50)) p.setBrush(fn.mkBrush(100,100,100,50))
p.drawRect(self.boundingRect()) p.drawRect(self.boundingRect())
def hoverEvent(self, ev):
ev.acceptDrags(QtCore.Qt.LeftButton)
def mouseDragEvent(self, ev):
if ev.button() == QtCore.Qt.LeftButton:
dpos = ev.pos() - ev.lastPos()
self.autoAnchor(self.pos() + dpos)
class ItemSample(GraphicsWidget): class ItemSample(GraphicsWidget):
""" Class responsible for drawing a single item in a LegendItem (sans label). """ Class responsible for drawing a single item in a LegendItem (sans label).

View File

@ -1,5 +1,9 @@
from pyqtgraph.Qt import QtGui, QtCore from pyqtgraph.Qt import QtGui, QtCore, USE_PYSIDE
import matplotlib import matplotlib
if USE_PYSIDE:
matplotlib.rcParams['backend.qt4']='PySide'
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
from matplotlib.figure import Figure from matplotlib.figure import Figure