def paintEvent(self,event): super(JoystickPointView,self).paintEvent(event) try: if self._initialized: pass except: self._origPos = self.pos() self._initialized = True qp = QPainter() qp.begin(self) borderWidth = 2 radius = self.height()/2 center = QtCore.QPoint(self.height()/2,self.width()/2) # Outer Circle qp.setRenderHint(QPainter.Antialiasing, True) qp.setPen(QPen(QtCore.Qt.darkGray, borderWidth, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap,QtCore.Qt.RoundJoin)) qp.setBrush(QBrush(QtCore.Qt.white, QtCore.Qt.SolidPattern)) qp.drawEllipse(center,radius-borderWidth,radius-borderWidth) # Inner Circle qp.setPen(QPen(QtCore.Qt.lightGray, borderWidth, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap,QtCore.Qt.RoundJoin)) qp.setBrush(QBrush(QtCore.Qt.white, QtCore.Qt.SolidPattern)) qp.drawEllipse(center,radius-borderWidth-1,radius-borderWidth-1) qp.end()
def limitStickMove(self,pos,mode = "square"): # Give joystick position from (0,0) x = 0 y = 0 if mode == "circle": norm = math.sqrt(pos.x() ** 2 + pos.y() ** 2) if norm > self._range: ratio = self._range / norm else: ratio = 1.0 x = pos.x() * ratio y = pos.y() * ratio if mode == "square": if abs(pos.x()) > self._range: sign = pos.x() / abs(pos.x()) x = sign * self._range else: x = pos.x() if abs(pos.y()) > self._range: sign = pos.y() / abs(pos.y()) y = sign * self._range else: y = pos.y() return QtCore.QPoint(x,y)
def paintEvent(self,event): if not self._initialized: self.placeStickAtCenter() self._initialized = True borderWidth = 1 joyRange = 80 center = QtCore.QPoint(self.height()/2,self.width()/2) qp = QPainter() qp.begin(self) qp.setRenderHint(QPainter.Antialiasing, True) qp.setPen(QPen(QtCore.Qt.lightGray, borderWidth, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap,QtCore.Qt.RoundJoin)) if self._mode == "circle": qp.drawEllipse(center,joyRange,joyRange) if self._mode == "square": x = center.x() - joyRange y = center.y() - joyRange width = joyRange * 2 height = joyRange * 2 qp.drawRect(x,y,width,height) qp.end() super(JoystickView,self).paintEvent(event)
def paint(self, painter, option, index): ''' Use the QTextDokument to represent the HTML text. @see: U{http://www.pyside.org/docs/pyside/PySide/QtGui/QAbstractItemDelegate.html#PySide.QtGui.QAbstractItemDelegate} ''' options = QtGui.QStyleOptionViewItemV4(option) self.initStyleOption(options, index) style = QtGui.QApplication.style( ) if options.widget is None else options.widget.style() doc = QtGui.QTextDocument() doc.setHtml(self.toHTML(options.text)) doc.setTextWidth(option.rect.width()) options.text = '' style.drawControl(QtGui.QStyle.CE_ItemViewItem, options, painter) ctx = QtGui.QAbstractTextDocumentLayout.PaintContext() #Highlighting text if item is selected #if (optionV4.state and QStyle::State_Selected): # ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText)); textRect = style.subElementRect(QtGui.QStyle.SE_ItemViewItemText, options, options.widget) painter.save() painter.translate( QtCore.QPoint(textRect.topLeft().x(), textRect.topLeft().y() - 3)) painter.setClipRect(textRect.translated(-textRect.topLeft())) doc.documentLayout().draw(painter, ctx) painter.restore()
def mouseReleaseEvent(self, event): self._moveJoy(QtCore.QPoint(0,0)) if self.__mousePressPos is not None: moved = event.globalPos() - self.__mousePressPos if moved.manhattanLength() > 3: event.ignore() return super(JoystickPointView, self).mouseReleaseEvent(event)
def readSettings(self): if nm.settings().store_geometry: settings = nm.settings().qsettings(nm.settings().CFG_GUI_FILE) settings.beginGroup("editor") maximized = settings.value("maximized", 'false') == 'true' if maximized: self.showMaximized() else: self.resize(settings.value("size", QtCore.QSize(800,640))) self.move(settings.value("pos", QtCore.QPoint(0, 0))) settings.endGroup()
def _doLayout(self, rect, testOnly): left, top, right, bottom = self.getContentsMargins() effectiveRect = rect.adjusted(+left, +top, -right, -bottom) x = effectiveRect.x() y = effectiveRect.y() lineHeight = 0 for item in self._items: w = item.widget() spaceX = self.horizontalSpacing() if spaceX == -1: spaceX = w.style().layoutSpacing( QtGui.QSizePolicy.PushButton, QtGui.QSizePolicy.PushButton, QtCore.Qt.Horizontal) spaceY = self.verticalSpacing() if spaceY == -1: spaceY = w.style().layoutSpacing( QtGui.QSizePolicy.PushButton, QtGui.QSizePolicy.PushButton, QtCore.Qt.Vertical) nextX = x + item.sizeHint().width() + spaceX if (nextX - spaceX > effectiveRect.right() and lineHeight > 0): x = effectiveRect.x() y = y + lineHeight + spaceY nextX = x + item.sizeHint().width() + spaceX lineHeight = 0 if not testOnly: item.setGeometry(QtCore.QRect( QtCore.QPoint(x, y), item.sizeHint())) x = nextX lineHeight = max(lineHeight, item.sizeHint().height()) return y + lineHeight - rect.y() + bottom
def paintEvent(self, event): QSlider.paintEvent(self, event) curr_value = str(self.value()) round_value = round(float(curr_value), 4) painter = QPainter(self) painter.setPen(QPen(QtCore.Qt.white)) font_metrics = QFontMetrics(self.font()) font_width = font_metrics.boundingRect(str(round_value)).width() font_height = font_metrics.boundingRect(str(round_value)).height() rect = self.geometry() if self.orientation() == QtCore.Qt.Horizontal: horizontal_x_pos = rect.width() - font_width - 5 horizontal_y_pos = rect.height() * 0.75 painter.drawText(QtCore.QPoint(horizontal_x_pos, horizontal_y_pos), str(round_value)) self.x = self.value() else: pass painter.drawRect(rect)
def revertCenterPos(self, pos = None): if pos is None: pos = self.pos() x = pos.x() - (self.width() / 2) y = pos.y() - (self.height() / 2) return QtCore.QPoint(x,y)