def paint (self, painter, option, index): if not (QStyle.State_Selected & option.state): r = QRect(option.rect) r.setX(0) # test if item/device is in use if index.data(Qt.UserRole).toBool(): painter.setBrush(QColor(255, 0, 0, 32)) else: painter.setBrush(QColor(0, 255, 0, 128)) painter.setPen(Qt.lightGray) painter.drawRect(r) QItemDelegate.paint(self, painter, option, index)
def paint (self, painter, option, index): model = index.model() item = model.data(index).toPyObject() if item == None: return text = str(item) if (len(text) > 6): # take only megabytes -->12<--345678 mb = text[:len(text)-6] bytes = text[len(text)-6:] painter.setPen (Qt.red) painter.drawText (option.rect,Qt.AlignHCenter and Qt.AlignVCenter, mb) painter.setPen (Qt.black) rect = QRect() rect = option.rect rect.setX(rect.x()+8*(len(mb))) painter.drawText (rect, Qt.AlignHCenter and Qt.AlignVCenter, bytes) else: painter.drawText (option.rect, Qt.AlignHCenter and Qt.AlignVCenter, text)
def paintEvent(self,event): painter = QPainter(self) btnRect = self.geometry() color = QColor(Qt.black) if self.hovered: color = self.color if self.pressed: color = self.color.darker(120) painter.setBrush(QBrush(color)) painter_path = QPainterPath() painter_path.addRoundedRect(1, 1, btnRect.width() - 2, btnRect.height() - 2, 0, 0) if self.hovered: painter.setPen(QPen(color,2)) outline = QPainterPath() outline.addRoundedRect(0, 0, btnRect.width(), btnRect.height(), 0, 0) painter.setOpacity(1) painter.drawPath(outline) painter.setClipPath(painter_path) painter.drawRoundedRect(1, 1, btnRect.width() - 2, btnRect.height() - 2, 0, 0) iconWidth = self.iconSize().width()*3/5 iconHeight = self.iconSize().height()*3/5 iconX = (btnRect.width()-iconWidth)/2 iconY = (btnRect.height()-iconHeight)/2 if self.pressed: iconX += 2 iconY += 2 iconPos = QRect() iconPos.setX(iconX) iconPos.setY(iconY) iconPos.setWidth(iconWidth) iconPos.setHeight(iconHeight) painter.drawPixmap(iconPos, QPixmap(self.icon().pixmap(self.iconSize())))
def __init__(self, parent = None): QDialog.__init__(self, parent) # get primiry monitor resolution qdw = QDesktopWidget() mainScreenSize = qdw.availableGeometry(qdw.primaryScreen()) # get center of the monitor center = mainScreenSize.center() # calculate width, height and x,y positions of the window r_width = round(mainScreenSize.width()/2) r_height = round(mainScreenSize.height()/2) r_x = round(center.x()-r_width/2) r_y = round(center.y()-r_height/2) # set default geometry of the window rect = QRect() rect.setX(r_x) rect.setY(r_y) rect.setWidth(r_width) rect.setHeight(r_height) self.setGeometry(rect)
def calIconTextPos(self,btnSize,iconSize): if self.text().isNull(): iconWidth = iconSize.width()*3/5 iconHeight = iconSize.height()*3/5 else: iconWidth = iconSize.width() iconHeight = iconSize.height() - 50 iconX = (btnSize.width()-iconWidth)/2 iconY = (btnSize.height()-iconHeight)/2 iconPos = QRect() iconPos.setX(iconX) iconPos.setY(iconY) iconPos.setWidth(iconWidth) iconPos.setHeight(iconHeight) textPos = QRect() if not self.text().isNull(): textPos.setX(iconX) textPos.setY(btnSize.height()- 50) textPos.setWidth(iconWidth) textPos.setHeight(50) return (iconPos,textPos)
def calIconTextPos(self, btnSize, iconSize): if self.text().isNull(): iconWidth = iconSize.width() * 3 / 5 iconHeight = iconSize.height() * 3 / 5 else: iconWidth = iconSize.width() iconHeight = iconSize.height() - 50 iconX = (btnSize.width() - iconWidth) / 2 iconY = (btnSize.height() - iconHeight) / 2 iconPos = QRect() iconPos.setX(iconX) iconPos.setY(iconY) iconPos.setWidth(iconWidth) iconPos.setHeight(iconHeight) textPos = QRect() if not self.text().isNull(): textPos.setX(iconX) textPos.setY(btnSize.height() - 50) textPos.setWidth(iconWidth) textPos.setHeight(50) return (iconPos, textPos)
class XSnapshotWidget(QWidget): def __init__(self, parent=None): super(XSnapshotWidget, self).__init__(parent) # define custom properties self._region = QRect() self._filepath = '' # define custom properties palette = self.palette() palette.setColor(palette.Window, QColor('white')) self.setPalette(palette) self.setWindowOpacity(0.5) self.setWindowFlags(Qt.SplashScreen) self.setFocus() def accept(self): """ Prompts the user for the filepath to save and then saves the image. """ filetypes = 'PNG Files (*.png);;JPG Files (*.jpg);;All Files (*.*)' filename = QFileDialog.getSaveFileName(None, 'Save Snapshot', self.filepath(), filetypes) if type(filename) == tuple: filename = filename[0] filename = str(filename) if not filename: self.reject() else: self.setFilepath(filename) self.save() def filepath(self): """ Returns the filepath that is going to be asved for this snapshot widget. :return <str> """ return self._filepath def hideWindow(self): """ Sets the window to hide/show while taking the snapshot. :param window | <QMainWindow> || <QDialog> """ return self._hideWindow def keyPressEvent(self, event): """ Listens for the escape key to cancel out from this snapshot. :param event | <QKeyPressEvent> """ # reject on a cancel if event.key() == Qt.Key_Escape: self.reject() super(XSnapshotWidget, self).keyPressEvent(event) def mousePressEvent(self, event): """ Starts the selection process for this widget and snapshot area. :param event | <QMousePressEvent> """ self._region.setX(event.pos().x()) self._region.setY(event.pos().y()) super(XSnapshotWidget, self).mousePressEvent(event) def mouseMoveEvent(self, event): """ Drags the selection view for this widget. :param event | <QMouseMoveEvent> """ w = event.pos().x() - self._region.x() h = event.pos().y() - self._region.y() self._region.setWidth(w) self._region.setHeight(h) self.repaint() super(XSnapshotWidget, self).mouseMoveEvent(event) def mouseReleaseEvent(self, event): """ Finishes the selection event. :param event | <QMouseReleaseEvent> """ self.accept() super(XSnapshotWidget, self).mouseReleaseEvent(event) def paintEvent(self, event): """ Handles the drawing for this widget and its selection region. :param event | <QPaintEvent> """ pen = QPen(Qt.DashLine) pen.setColor(QColor('red')) painter = QPainter(self) painter.setPen(pen) clr = QColor('black') clr.setAlpha(100) painter.setBrush(clr) painter.drawRect(self._region) def reject(self): """ Rejects the snapshot and closes the widget. """ if self.hideWindow(): self.hideWindow().show() self.close() self.deleteLater() def region(self): """ Returns the selection region defined by the rectangle for snapshoting. :return <QRect> """ return self._region def save(self): """ Saves the snapshot based on the current region. """ # close down the snapshot widget if self.hideWindow(): self.hideWindow().hide() self.hide() QApplication.processEvents() time.sleep(1) # create the pixmap to save wid = QApplication.desktop().winId() if not self._region.isNull(): x = self._region.x() y = self._region.y() w = self._region.width() h = self._region.height() else: x = self.x() y = self.y() w = self.width() h = self.height() pixmap = QPixmap.grabWindow(wid, x, y, w, h) pixmap.save(self.filepath()) self.close() self.deleteLater() if self.hideWindow(): self.hideWindow().show() def show(self): """ Shows this widget and hides the specified window if necessary. """ super(XSnapshotWidget, self).show() if self.hideWindow(): self.hideWindow().hide() QApplication.processEvents() def setFilepath(self, filepath): """ Sets the filepath that will be saved for this snapshot. :param filepath | <str> """ self._filepath = filepath def setHideWindow(self, window): """ Sets the window that will be hidden while this snapshot is being taken. :param window | <QMainWindow> """ self._hideWindow = window def setRegion(self, rect): """ Sets the region rectangle to the inputed rect. :param rect | <QRect> """ if rect is not None: self._region = rect @staticmethod def capture(rect=None, filepath='', prompt=True, hideWindow=None): """ Prompts the user to capture the screen. :param rect | <QRect> filepath | <str> prompt | <bool> :return (<str> filepath, <bool> accepted) """ widget = XSnapshotWidget(QApplication.desktop()) widget.setRegion(rect) widget.setHideWindow(hideWindow) widget.setFilepath(filepath) widget.move(1, 1) widget.resize(QApplication.desktop().size()) if prompt or not filepath: widget.show() else: widget.save()
class AnalogClock(QGraphicsView): """ Analog Clock Widget. It shows a analog svg clock """ AUTO = 0 QUARTZ = 1 ECO = 2 def __init__(self, parent=None, path=None, static = False): """ Constructor """ QGraphicsView.__init__(self, parent) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) #self.setAutoFillBackground(True) #pal = self.palette(); #br = QBrush(Qt.NoBrush) #pal.setBrush(QPalette.Background, br); #self.setPalette(pal); #self.setBackgroundBrush(br) # is the only thing seems to work to get the background transparent self.setStyleSheet("background-color: rgba(0, 0, 0, 0%);") self.setFrameShape(QFrame.NoFrame) # self.setBackgroundOrigin( BackgroundOrigin background ) self._static = static self.setDefaults() self.loadTheme(path) self.startTimers() self.resetEcoTimer() #self.setClockType() def setDefaults(self): self.sysThemeDir=os.path.join(os.path.dirname(__file__), os.path.pardir, "theme") self.themeDir="" self.themeName="" self.ecoTimeout = 0 self.clockMode = self.AUTO self.drop="clock-drop-shadow.svg" self.face="clock-face.svg" self.shadow="clock-face-shadow.svg" self.marks= "clock-marks.svg" self.frame="clock-frame.svg" self.hourHand="clock-hour-hand.svg" self.minuteHand="clock-minute-hand.svg" self.secondsHand="clock-second-hand.svg" self.glass="clock-glass.svg" #Variables that keep track of the angle of the hands, and Time self.secTimer = QBasicTimer() self.minTimer=QTimer() self.calibrateTimer=QTimer() self.ecoTimer=QTimer() self.syncTimer=QTimer() self.secs=0 #The second hand counter 166=6 beats per second, 1000 =1 beat per sec self.secTimerType=166.9 self.secTimerBeat=1 #The Minute update counter every 10secs for Quartz, once per minute for Eco self.minTimerType=1000 #Variables that keep track of scene self.scene = QGraphicsScene() self.sceneWidth=0 self.sceneHeight=0 self.centerx=0 self.centery=0 self.xoffset=-15 self.yoffset=-5 self.ixoffset=self.xoffset*-1 self.iyoffset=self.yoffset*-1 self.svgRect=QRect() self.svgRect.setX(self.xoffset) self.svgRect.setY(self.yoffset) def loadTheme(self, path): self.secTimer.stop() self.minTimer.stop() self.calibrateTimer.stop() self.syncTimer.stop() self.scene.clear() #Check to see if files in directory stored in QConfig exists self.themeDir=path or self.sysThemeDir try: f=open(os.path.join(self.themeDir, unicode(self.face))) except (OSError, IOError), e: print "can't load theme, loading default" #Initialize the Graphics Scene, Graphicsview is setup in QtDesigner UI,do not convert to a loop def path(suffix): return os.path.join(self.themeDir, self.themeName ,suffix) self.svgDrop=QGraphicsSvgItem(path(self.drop)) renderer=self.svgDrop.renderer() self.svgDrop.setZValue(1) self.scene.addItem(self.svgDrop) self.svgFace=QGraphicsSvgItem(path(self.face)) renderer=self.svgFace.renderer() self.svgFace.setZValue(2) self.scene.addItem(self.svgFace) self.svgShadow=QGraphicsSvgItem(path(self.shadow)) renderer=self.svgShadow.renderer() self.svgShadow.setZValue(4) self.scene.addItem(self.svgShadow) self.svgMarks=QGraphicsSvgItem(path(self.marks)) renderer=self.svgMarks.renderer() self.svgMarks.setZValue(5) self.scene.addItem(self.svgMarks) self.svgFrame=QGraphicsSvgItem(path(self.frame)) renderer=self.svgFrame.renderer() self.svgFrame.setZValue(6) self.scene.addItem(self.svgFrame) #get the bounding box for the scene now filled with the clock theme self.sceneWidth=self.scene.itemsBoundingRect().width() self.sceneHeight=self.scene.itemsBoundingRect().height() self.centerx=self.sceneWidth/2 self.centery=self.sceneHeight/2 self.centerOn(self.centerx, self.centery) self.scene.setSceneRect(0, 0,self.sceneWidth, self.sceneHeight) #===Load the Hour hand and scale the viewport to its size=========== self.svgHour=QGraphicsSvgItem(path(self.hourHand)) self.renderer=self.svgHour.renderer() self.rect=self.svgHour.boundingRect() self.svgRect.setWidth(self.rect.width()) self.svgRect.setHeight(self.rect.height()) #setup the Viewbox self.renderer.setViewBox(self.svgRect) self.svgHour.setPos(self.centerx+self.xoffset, self.centery+self.yoffset) self.svgHour.setZValue(7) self.scene.addItem(self.svgHour) #===Load the Minute hand and scale the viewport to its size=========== self.svgMinute=QGraphicsSvgItem(path(self.minuteHand)) self.renderer=self.svgMinute.renderer() self.rect=self.svgMinute.boundingRect() self.svgRect.setWidth(self.rect.width()) self.svgRect.setHeight(self.rect.height()) #setup the Viewbox self.renderer.setViewBox(self.svgRect) self.svgMinute.setPos(self.centerx+self.xoffset, self.centery+self.yoffset) self.svgMinute.setZValue(8) self.scene.addItem(self.svgMinute) #===Load the Seconds Hand and scale the viewport to its size=========== self.svgSecond=QGraphicsSvgItem(path(self.secondsHand)) self.renderer=self.svgSecond.renderer() self.rect=self.svgSecond.boundingRect() self.svgRect.setWidth(self.rect.width()) self.svgRect.setHeight(self.rect.height()) #setup the Viewbox self.renderer.setViewBox(self.svgRect) self.svgSecond.setPos(self.centerx+self.xoffset, self.centery+self.yoffset) self.svgSecond.setZValue(9) self.scene.addItem(self.svgSecond) #Add the Glass as the top layer self.fileExist=1 try: f=open (path("clock-glass.svg")) except : self.fileExist=0 if self.fileExist==1: self.svgItem=QGraphicsSvgItem(path(self.glass)) renderer=self.svgItem.renderer() self.svgItem.setZValue(10) self.scene.addItem(self.svgItem) #setup the hands against the current time self.showTime() self.calibrateTime() #Scale the Clock to full screen and show whole clock self.resetTransform() self.setZoom(None) self.setScene(self.scene)
def paintEvent(self, e): """ """ PKWidget.paintEvent(self, e) painter = QPainter(self) orig_pen = QPen(painter.pen()) orig_brush = QBrush(painter.brush()) orig_font = QFont(painter.font()) metrics = painter.fontMetrics() f_height = metrics.ascent() text_flags = Qt.AlignHCenter | Qt.AlignVCenter region = e.region() for item in self._shown: font_y = item.y + item.height / 2 + f_height / 2 item_rect = QRect(0, item.y, self.width(), item.height) if not region.contains(item_rect): continue painter.setFont(orig_font) # background pen = item.color().dark(110) pen.setAlpha(100) painter.setBrush(QBrush(item.color())) painter.setPen(QPen(pen)) w = self.width() * (item.progress * .01) rect = QRect(0, item.y, w, item.height) painter.drawRect(rect) # queue pos pen = pen.dark(140) pen.setAlpha(255) painter.setPen(QPen(pen)) queue_rect = QRect(self.padding, item.y + self.padding, item.height - self.padding * 2, item.height - self.padding * 2) painter.drawRoundRect(queue_rect, 35, 35) # num if not item.num is None: painter.setPen(orig_pen) painter.setBrush(orig_brush) painter.drawText(queue_rect, text_flags, str(item.num)) # text painter.setPen(orig_pen) painter.setBrush(orig_brush) font = QFont('Utopia, Italic', 14, -1, True) painter.setFont(font) rect = QRect(item_rect) rect.setX(item.height + self.padding * 2) rect.setWidth(rect.width() - rect.x()) painter.drawText(rect, Qt.AlignVCenter | Qt.AlignLeft, item.text) # state if item.state: font = QFont('7th Service Expanded Italic, Italic') font.setPointSize(18) pen = QColor(orig_pen.color()) pen.setAlpha(50) painter.setPen(QPen(pen)) painter.setFont(font) x = item.x y = item.y w = self.width() h = item.height rect = QRect(x, y, w, h) flags = Qt.AlignVCenter | Qt.AlignRight painter.drawText(rect, flags, item.state+' ')