本文整理汇总了Python中PyQt5.QtWidgets.QGraphicsLineItem.pos方法的典型用法代码示例。如果您正苦于以下问题:Python QGraphicsLineItem.pos方法的具体用法?Python QGraphicsLineItem.pos怎么用?Python QGraphicsLineItem.pos使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PyQt5.QtWidgets.QGraphicsLineItem
的用法示例。
在下文中一共展示了QGraphicsLineItem.pos方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: RotaryDialHoverRegion
# 需要导入模块: from PyQt5.QtWidgets import QGraphicsLineItem [as 别名]
# 或者: from PyQt5.QtWidgets.QGraphicsLineItem import pos [as 别名]
class RotaryDialHoverRegion(QGraphicsEllipseItem):
def __init__(self, rect, parent=None):
# setup DNA line
super(QGraphicsEllipseItem, self).__init__(rect, parent)
self._parent = parent
self.setPen(QPen(Qt.NoPen))
self.setBrush(_HOVER_BRUSH)
self.setAcceptHoverEvents(True)
# hover marker
self._hoverLine = QGraphicsLineItem(-_ROTARY_DELTA_WIDTH/2, 0, _ROTARY_DELTA_WIDTH/2, 0, self)
self._hoverLine.setPen(QPen(QColor(204, 0, 0), .5))
self._hoverLine.hide()
self._startPos = None
self._startAngle = None # save selection start
self._clockwise = None
self.dummy = RotaryDialDeltaItem(0, 0, parent)
self.dummy.hide()
def updateRect(self, rect):
self.setRect(rect)
def hoverEnterEvent(self, event):
self.updateHoverLine(event)
self._hoverLine.show()
# end def
def hoverMoveEvent(self, event):
self.updateHoverLine(event)
# end def
def hoverLeaveEvent(self, event):
self._hoverLine.hide()
# end def
def mousePressEvent(self, event):
r = _RADIUS
self.updateHoverLine(event)
pos = self._hoverLine.pos()
aX, aY, angle = self.snapPosToCircle(pos, r)
if angle != None:
self._startPos = QPointF(aX, aY)
self._startAngle = self.updateHoverLine(event)
self.dummy.updateAngle(self._startAngle, 0)
self.dummy.show()
# mark the start
# f = QGraphicsEllipseItem(pX, pY, 2, 2, self)
# f.setPen(QPen(Qt.NoPen))
# f.setBrush(QBrush(QColor(204, 0, 0)))
# end def
def mouseMoveEvent(self, event):
eventAngle = self.updateHoverLine(event)
# Record initial direction before calling getSpanAngle
if self._clockwise is None:
self._clockwise = False if eventAngle > self._startAngle else True
spanAngle = self.getSpanAngle(eventAngle)
self.dummy.updateAngle(self._startAngle, spanAngle)
# end def
def mouseReleaseEvent(self, event):
self.dummy.hide()
endAngle = self.updateHoverLine(event)
spanAngle = self.getSpanAngle(endAngle)
old_angle = self._parent.virtualHelix().getProperty('eulerZ')
new_angle = round((old_angle - spanAngle) % 360,0)
self._parent.virtualHelix().setProperty('eulerZ', new_angle)
# mark the end
# x = self._hoverLine.x()
# y = self._hoverLine.y()
# f = QGraphicsEllipseItem(x, y, 6, 6, self)
# f.setPen(QPen(Qt.NoPen))
# f.setBrush(QBrush(QColor(204, 0, 0, 128)))
# end def
def updateHoverLine(self, event):
"""
Moves red line to point (aX,aY) on RotaryDialLine closest to event.pos.
Returns the angle of aX, aY, using the Qt arc coordinate system
(0 = east, 90 = north, 180 = west, 270 = south).
"""
r = _RADIUS
aX, aY, angle = self.snapPosToCircle(event.pos(), r)
if angle != None:
self._hoverLine.setPos(aX, aY)
self._hoverLine.setRotation(-angle)
return angle
# end def
def snapPosToCircle(self, pos, radius):
"""Given x, y and radius, return x,y of nearest point on circle, and its angle"""
pX = pos.x()
pY = pos.y()
cX = cY = radius
vX = pX - cX
vY = pY - cY
magV = sqrt(vX*vX + vY*vY)
if magV == 0:
#.........这里部分代码省略.........