本文整理汇总了Python中AnyQt.QtWidgets.QGraphicsWidget类的典型用法代码示例。如果您正苦于以下问题:Python QGraphicsWidget类的具体用法?Python QGraphicsWidget怎么用?Python QGraphicsWidget使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了QGraphicsWidget类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: mouseReleaseEvent
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton and self.__tmpLine:
endItem = find_item_at(self.scene(), event.scenePos(),
type=ChannelAnchor)
if endItem is not None:
startItem = self.__dragStartItem
startChannel = startItem.channel()
endChannel = endItem.channel()
possible = False
# Make sure the drag was from input to output (or reversed) and
# not between input -> input or output -> output
if type(startChannel) != type(endChannel):
if isinstance(startChannel, InputSignal):
startChannel, endChannel = endChannel, startChannel
possible = compatible_channels(startChannel, endChannel)
if possible:
self.addLink(startChannel, endChannel)
self.scene().removeItem(self.__tmpLine)
self.__tmpLine = None
self.__dragStartItem = None
QGraphicsWidget.mouseReleaseEvent(self, event)
示例2: mouseMoveEvent
def mouseMoveEvent(self, event):
if event.buttons() & Qt.LeftButton:
downPos = event.buttonDownPos(Qt.LeftButton)
if not self.__tmpLine and self.__dragStartItem and \
(downPos - event.pos()).manhattanLength() > \
QApplication.instance().startDragDistance():
# Start a line drag
line = QGraphicsLineItem(self)
start = self.__dragStartItem.boundingRect().center()
start = self.mapFromItem(self.__dragStartItem, start)
line.setLine(start.x(), start.y(),
event.pos().x(), event.pos().y())
pen = QPen(Qt.black, 4)
pen.setCapStyle(Qt.RoundCap)
line.setPen(pen)
line.show()
self.__tmpLine = line
if self.__tmpLine:
# Update the temp line
line = self.__tmpLine.line()
line.setP2(event.pos())
self.__tmpLine.setLine(line)
QGraphicsWidget.mouseMoveEvent(self, event)
示例3: mouseMoveEvent
def mouseMoveEvent(self, event):
if event.buttons() & Qt.LeftButton:
downPos = event.buttonDownPos(Qt.LeftButton)
if not self.__tmpLine and self.__dragStartItem and \
(downPos - event.pos()).manhattanLength() > \
QApplication.instance().startDragDistance():
# Start a line drag
line = LinkLineItem(self)
start = self.__dragStartItem.boundingRect().center()
start = self.mapFromItem(self.__dragStartItem, start)
eventPos = event.pos()
line.setLine(start.x(), start.y(), eventPos.x(), eventPos.y())
pen = QPen(self.palette().color(QPalette.Foreground), 4)
pen.setCapStyle(Qt.RoundCap)
line.setPen(pen)
line.show()
self.__tmpLine = line
if self.__dragStartItem in self.sourceNodeWidget.channelAnchors:
for anchor in self.sinkNodeWidget.channelAnchors:
self.__updateAnchorState(anchor, [self.__dragStartItem])
else:
for anchor in self.sourceNodeWidget.channelAnchors:
self.__updateAnchorState(anchor, [self.__dragStartItem])
if self.__tmpLine:
# Update the temp line
line = self.__tmpLine.line()
maybe_anchor = find_item_at(self.scene(), event.scenePos(),
type=ChannelAnchor)
# If hovering over anchor
if maybe_anchor is not None and maybe_anchor.isEnabled():
target_pos = maybe_anchor.boundingRect().center()
target_pos = self.mapFromItem(maybe_anchor, target_pos)
line.setP2(target_pos)
else:
target_pos = event.pos()
line.setP2(target_pos)
self.__tmpLine.setLine(line)
QGraphicsWidget.mouseMoveEvent(self, event)
示例4: __init__
def __init__(self, parent=None, direction=Qt.LeftToRight,
node=None, icon=None, iconSize=None, **args):
QGraphicsWidget.__init__(self, parent, **args)
self.setAcceptedMouseButtons(Qt.NoButton)
self.__direction = direction
self.setLayout(QGraphicsLinearLayout(Qt.Horizontal))
# Set the maximum size, otherwise the layout can't grow beyond its
# sizeHint (and we need it to grow so the widget can grow and keep the
# contents centered vertically.
self.layout().setMaximumSize(QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX))
self.setSizePolicy(QSizePolicy.MinimumExpanding,
QSizePolicy.MinimumExpanding)
self.__iconSize = iconSize or QSize(64, 64)
self.__icon = icon
self.__iconItem = QGraphicsPixmapItem(self)
self.__iconLayoutItem = GraphicsItemLayoutItem(item=self.__iconItem)
self.__channelLayout = QGraphicsGridLayout()
self.__channelAnchors = []
if self.__direction == Qt.LeftToRight:
self.layout().addItem(self.__iconLayoutItem)
self.layout().addItem(self.__channelLayout)
channel_alignemnt = Qt.AlignRight
else:
self.layout().addItem(self.__channelLayout)
self.layout().addItem(self.__iconLayoutItem)
channel_alignemnt = Qt.AlignLeft
self.layout().setAlignment(self.__iconLayoutItem, Qt.AlignCenter)
self.layout().setAlignment(self.__channelLayout,
Qt.AlignVCenter | channel_alignemnt)
if node is not None:
self.setSchemeNode(node)
示例5: mousePressEvent
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
startItem = find_item_at(self.scene(), event.pos(),
type=ChannelAnchor)
if startItem is not None:
# Start a connection line drag.
self.__dragStartItem = startItem
self.__tmpLine = None
event.accept()
return
lineItem = find_item_at(self.scene(), event.scenePos(),
type=QGraphicsLineItem)
if lineItem is not None:
# Remove a connection under the mouse
for link in self.__links:
if link.lineItem == lineItem:
self.removeLink(link.output, link.input)
event.accept()
return
QGraphicsWidget.mousePressEvent(self, event)
示例6: sizeHint
def sizeHint(self, which, constraint=QSizeF()):
if which == Qt.PreferredSize:
doc = self.document()
textwidth = doc.textWidth()
if textwidth != constraint.width():
cloned = doc.clone(self)
cloned.setTextWidth(constraint.width())
sh = cloned.size()
cloned.deleteLater()
else:
sh = doc.size()
return sh
else:
return QGraphicsWidget.sizeHint(self, which, constraint)
示例7: replot_experiments
def replot_experiments(self):
"""Replot the whole quality plot.
"""
self.scene.clear()
labels = []
max_dist = numpy.nanmax(list(filter(None, self.distances)))
rug_widgets = []
group_pen = QPen(Qt.black)
group_pen.setWidth(2)
group_pen.setCapStyle(Qt.RoundCap)
background_pen = QPen(QColor(0, 0, 250, 150))
background_pen.setWidth(1)
background_pen.setCapStyle(Qt.RoundCap)
main_widget = QGraphicsWidget()
layout = QGraphicsGridLayout()
attributes = self.data.domain.attributes
if self.data is not None:
for (group, indices), dist_vec in zip(self.groups, self.distances):
indices_set = set(indices)
rug_items = []
if dist_vec is not None:
for i, attr in enumerate(attributes):
# Is this a within group distance or background
in_group = i in indices_set
if in_group:
rug_item = ClickableRugItem(dist_vec[i] / max_dist,
1.0, self.on_rug_item_clicked)
rug_item.setPen(group_pen)
tooltip = experiment_description(attr)
rug_item.setToolTip(tooltip)
rug_item.group_index = indices.index(i)
rug_item.setZValue(rug_item.zValue() + 1)
else:
rug_item = ClickableRugItem(dist_vec[i] / max_dist,
0.85, self.on_rug_item_clicked)
rug_item.setPen(background_pen)
tooltip = experiment_description(attr)
rug_item.setToolTip(tooltip)
rug_item.group = group
rug_item.index = i
rug_item.in_group = in_group
rug_items.append(rug_item)
rug_widget = RugGraphicsWidget(parent=main_widget)
rug_widget.set_rug(rug_items)
rug_widgets.append(rug_widget)
label = group_label(self.selected_split_by_labels(), group)
label_item = QGraphicsSimpleTextItem(label, main_widget)
label_item = GraphicsSimpleTextLayoutItem(label_item, parent=layout)
label_item.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
labels.append(label_item)
for i, (label, rug_w) in enumerate(zip(labels, rug_widgets)):
layout.addItem(label, i, 0, Qt.AlignVCenter)
layout.addItem(rug_w, i, 1)
layout.setRowMaximumHeight(i, 30)
main_widget.setLayout(layout)
self.scene.addItem(main_widget)
self.main_widget = main_widget
self.rug_widgets = rug_widgets
self.labels = labels
self.on_view_resize(self.scene_view.size())
示例8: sizeHint
def sizeHint(self, which, constraint=QSizeF()):
if which == Qt.PreferredSize:
return QSizeF(self._pixmap.size())
else:
return QGraphicsWidget.sizeHint(self, which, constraint)
示例9: resizeEvent
def resizeEvent(self, event):
width = event.newSize().width()
left, _, right, _ = self.textMargins()
self.__textItem.setTextWidth(max(width - left - right, 0))
self.__updateFrame()
QGraphicsWidget.resizeEvent(self, event)
示例10: setGeometry
def setGeometry(self, rect):
QGraphicsWidget.setGeometry(self, rect)
示例11: __init__
def __init__(self, parent=None, **kwargs):
QGraphicsWidget.__init__(self, parent, **kwargs)
示例12: __updateState
def __updateState(self):
"""
Update the widget with the new source/sink node signal descriptions.
"""
widget = QGraphicsWidget()
widget.setLayout(QGraphicsGridLayout())
# Space between left and right anchors
widget.layout().setHorizontalSpacing(50)
left_node = EditLinksNode(self, direction=Qt.LeftToRight,
node=self.source)
left_node.setSizePolicy(QSizePolicy.MinimumExpanding,
QSizePolicy.MinimumExpanding)
right_node = EditLinksNode(self, direction=Qt.RightToLeft,
node=self.sink)
right_node.setSizePolicy(QSizePolicy.MinimumExpanding,
QSizePolicy.MinimumExpanding)
left_node.setMinimumWidth(150)
right_node.setMinimumWidth(150)
widget.layout().addItem(left_node, 0, 0,)
widget.layout().addItem(right_node, 0, 1,)
title_template = "<center><b>{0}<b></center>"
left_title = GraphicsTextWidget(self)
left_title.setHtml(title_template.format(escape(self.source.title)))
left_title.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
right_title = GraphicsTextWidget(self)
right_title.setHtml(title_template.format(escape(self.sink.title)))
right_title.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
widget.layout().addItem(left_title, 1, 0,
alignment=Qt.AlignHCenter | Qt.AlignTop)
widget.layout().addItem(right_title, 1, 1,
alignment=Qt.AlignHCenter | Qt.AlignTop)
widget.setParentItem(self)
max_w = max(left_node.sizeHint(Qt.PreferredSize).width(),
right_node.sizeHint(Qt.PreferredSize).width())
# fix same size
left_node.setMinimumWidth(max_w)
right_node.setMinimumWidth(max_w)
left_title.setMinimumWidth(max_w)
right_title.setMinimumWidth(max_w)
self.layout().addItem(widget)
self.layout().activate()
self.sourceNodeWidget = left_node
self.sinkNodeWidget = right_node
self.sourceNodeTitle = left_title
self.sinkNodeTitle = right_title
self.__resetAnchorStates()
# AnchorHover hover over anchor before hovering over line
class AnchorHover(QGraphicsRectItem):
def __init__(self, anchor, parent=None):
QGraphicsRectItem.__init__(self, parent=parent)
self.setAcceptHoverEvents(True)
self.anchor = anchor
self.setRect(anchor.boundingRect())
self.setPos(self.mapFromScene(anchor.scenePos()))
self.setFlag(QGraphicsItem.ItemHasNoContents, True)
def hoverEnterEvent(self, event):
if self.anchor.isEnabled():
self.anchor.hoverEnterEvent(event)
else:
event.ignore()
def hoverLeaveEvent(self, event):
if self.anchor.isEnabled():
self.anchor.hoverLeaveEvent(event)
else:
event.ignore()
for anchor in left_node.channelAnchors + right_node.channelAnchors:
anchor_hover = AnchorHover(anchor, parent=self)
anchor_hover.setZValue(2.0)
示例13: __updateState
def __updateState(self):
"""
Update the widget with the new source/sink node signal descriptions.
"""
widget = QGraphicsWidget()
widget.setLayout(QGraphicsGridLayout())
# Space between left and right anchors
widget.layout().setHorizontalSpacing(50)
left_node = EditLinksNode(self, direction=Qt.LeftToRight,
node=self.source)
left_node.setSizePolicy(QSizePolicy.MinimumExpanding,
QSizePolicy.MinimumExpanding)
right_node = EditLinksNode(self, direction=Qt.RightToLeft,
node=self.sink)
right_node.setSizePolicy(QSizePolicy.MinimumExpanding,
QSizePolicy.MinimumExpanding)
left_node.setMinimumWidth(150)
right_node.setMinimumWidth(150)
widget.layout().addItem(left_node, 0, 0,)
widget.layout().addItem(right_node, 0, 1,)
title_template = "<center><b>{0}<b></center>"
left_title = GraphicsTextWidget(self)
left_title.setHtml(title_template.format(escape(self.source.title)))
left_title.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
right_title = GraphicsTextWidget(self)
right_title.setHtml(title_template.format(escape(self.sink.title)))
right_title.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
widget.layout().addItem(left_title, 1, 0,
alignment=Qt.AlignHCenter | Qt.AlignTop)
widget.layout().addItem(right_title, 1, 1,
alignment=Qt.AlignHCenter | Qt.AlignTop)
widget.setParentItem(self)
max_w = max(left_node.sizeHint(Qt.PreferredSize).width(),
right_node.sizeHint(Qt.PreferredSize).width())
# fix same size
left_node.setMinimumWidth(max_w)
right_node.setMinimumWidth(max_w)
left_title.setMinimumWidth(max_w)
right_title.setMinimumWidth(max_w)
self.layout().addItem(widget)
self.layout().activate()
self.sourceNodeWidget = left_node
self.sinkNodeWidget = right_node
self.sourceNodeTitle = left_title
self.sinkNodeTitle = right_title
示例14: __init__
def __init__(self, parent=None, rug=None):
QGraphicsWidget.__init__(self, parent)
self.rug_items = []
self.set_rug(rug)
self.setMaximumHeight(30)
self.setMinimumHeight(30)
示例15: resizeEvent
def resizeEvent(self, event):
"""Reimplemented from QGraphicsWidget
"""
QGraphicsWidget.resizeEvent(self, event)
self.update_rug_geometry()