예제 #1
0
def build_dark_palette():
    darkPalette = QPalette()
    window = QColor(50, 52, 55)
    text = QColor(200, 200, 200)
    disabledText = text.darker(170)
    base = window.darker(150)
    button = window.lighter(115)
    highlight = QColor(42, 130, 218)
    dark = window.darker(170)

    darkPalette.setColor(QPalette.Window, window)
    darkPalette.setColor(QPalette.WindowText, text)
    darkPalette.setColor(QPalette.Disabled, QPalette.WindowText, disabledText)
    darkPalette.setColor(QPalette.Base, base)
    darkPalette.setColor(QPalette.AlternateBase, QColor(46, 47, 48))
    darkPalette.setColor(QPalette.ToolTipBase, base)
    darkPalette.setColor(QPalette.ToolTipText, text)
    darkPalette.setColor(QPalette.Text, text)
    darkPalette.setColor(QPalette.Disabled, QPalette.Text, disabledText)
    darkPalette.setColor(QPalette.Button, button)
    darkPalette.setColor(QPalette.ButtonText, text)
    darkPalette.setColor(QPalette.Disabled, QPalette.ButtonText, disabledText)

    darkPalette.setColor(QPalette.Mid, button.lighter(120))
    darkPalette.setColor(QPalette.Highlight, highlight)
    darkPalette.setColor(QPalette.Disabled, QPalette.Highlight,
                         QColor(80, 80, 80))
    darkPalette.setColor(QPalette.HighlightedText, Qt.white)
    darkPalette.setColor(QPalette.Disabled, QPalette.HighlightedText,
                         QColor(127, 127, 127))
    darkPalette.setColor(QPalette.Shadow, Qt.black)
    darkPalette.setColor(QPalette.Link, highlight.lighter(130))
    return darkPalette
예제 #2
0
    def paint(self, painter, option, c: QColor, w: int, h: int, bounding_rect,
              theme: str, widget):

        painter.setRenderHint(QPainter.Antialiasing)
        brush = QBrush(QColor(100, 100, 100, 150))  # QBrush(QColor('#3B9CD9'))
        painter.setBrush(brush)

        if self.ni.parent_node.design_style == 'extended':

            if theme == 'dark std':
                self.draw_dark_extended_background(painter, c, w, h,
                                                   bounding_rect)

            elif theme == 'dark tron':
                self.draw_tron_extended_background(painter, c, w, h,
                                                   bounding_rect)

            elif theme == 'ghostly':
                self.draw_ghostly_extended_background(painter, c, w, h,
                                                      bounding_rect)

            elif theme == 'blender':
                self.draw_blender_extended_background(painter, c, w, h,
                                                      bounding_rect)

        elif self.ni.parent_node.design_style == 'minimalistic':

            if theme == 'dark std':
                self.draw_dark_minimalistic(painter, c, w, h, bounding_rect)

            elif theme == 'dark tron':
                if option.state & QStyle.State_MouseOver:  # use special dark background color when mouse hovers
                    self.draw_tron_minimalistic(painter,
                                                10,
                                                c,
                                                w,
                                                h,
                                                background_color=c.darker())
                else:
                    self.draw_tron_minimalistic(painter, 10, c, w, h)

            elif theme == 'ghostly':
                if option.state & QStyle.State_MouseOver:  # use special dark background color when mouse hovers
                    self.draw_ghostly_minimalistic(painter,
                                                   15,
                                                   c,
                                                   w,
                                                   h,
                                                   background_color=c.darker())
                else:
                    self.draw_ghostly_minimalistic(painter, 15, c, w, h)

            elif theme == 'blender':
                self.draw_blender_minimalistic(painter, 20, c, w, h,
                                               bounding_rect)
예제 #3
0
 def __init__(self, *args, button_text="", button_slot=None, **kwargs):
     super().__init__(*args, **kwargs)
     button = QPushButton(button_text, self)
     self.layout().addWidget(button)
     button.clicked.connect(button_slot)
     button.clicked.connect(self.start_self_destruction)
     # Style button: We try hard to programmatically find good contrasting colors
     label_bg_color = QColor(self._background_color)
     base_hue = label_bg_color.hsvHueF()
     saturation = label_bg_color.hsvSaturationF()
     bg_color = color_from_index(1,
                                 2,
                                 base_hue=base_hue,
                                 saturation=saturation)
     pressed_bg_color = bg_color.darker(110)
     hover_bg_color = bg_color.lighter(110)
     border_color = QColor("#F0F0F0")
     pressed_border_color = border_color.darker(110)
     ss = (
         "QPushButton{"
         f"background-color: {bg_color.name()}; color: #0F0F0F; "
         f"border: 2px solid {border_color.name()}; border-style: groove; border-radius: 4px;}}"
         f"QPushButton:hover{{background-color: {hover_bg_color.name()};}}"
         f"QPushButton:pressed{{background-color: {pressed_bg_color.name()};"
         f"border: 2px solid {pressed_border_color.name()};}}")
     button.setStyleSheet(ss)
     font = QFont()
     font.setBold(True)
     button.setFont(font)
 def _update_person_list_view(self, person_list, view):
     view.clear()
     # logger.debug("Updating %d persons on view %s", len(person_list), str(view))
     for person in person_list:
         view.add_human_by_pos(person.person_id,
                               (person.pos.x, person.pos.y))
         color = QColor(person.color)
         darker_factor = 100 + int(person.detection_delta_time() / 200)
         color = color.darker(darker_factor)
         # logger.debug("setting color %s darker factor %d"%(color.name(), darker_factor))
         view.set_human_color(person.person_id, color)
예제 #5
0
파일: palette.py 프로젝트: chuong/ScanRig
    def __init__(self, qmlEngine, parent=None):
        """Palette constructor.

        Args:
            qmlEngine (QQmlApplicationEngine)
        """
        super(Palette, self).__init__(parent)
        self.qmlEngine = qmlEngine
        darkPalette = QPalette()
        window = QColor(50, 52, 55)
        text = QColor(200, 200, 200)
        disabledText = text.darker(170)
        base = window.darker(150)
        button = window.lighter(115)
        highlight = QColor(42, 130, 218)
        dark = window.darker(170)

        darkPalette.setColor(QPalette.Window, window)
        darkPalette.setColor(QPalette.WindowText, text)
        darkPalette.setColor(QPalette.Disabled, QPalette.WindowText, disabledText)
        darkPalette.setColor(QPalette.Base, base)
        darkPalette.setColor(QPalette.AlternateBase, QColor(46, 47, 48))
        darkPalette.setColor(QPalette.ToolTipBase, base)
        darkPalette.setColor(QPalette.ToolTipText, text)
        darkPalette.setColor(QPalette.Text, text)
        darkPalette.setColor(QPalette.Disabled, QPalette.Text, disabledText)
        darkPalette.setColor(QPalette.Button, button)
        darkPalette.setColor(QPalette.ButtonText, text)
        darkPalette.setColor(QPalette.Disabled, QPalette.ButtonText, disabledText)

        darkPalette.setColor(QPalette.Mid, button.lighter(120))
        darkPalette.setColor(QPalette.Highlight, highlight)
        darkPalette.setColor(QPalette.Disabled, QPalette.Highlight, QColor(80, 80, 80))
        darkPalette.setColor(QPalette.HighlightedText, Qt.white)
        darkPalette.setColor(QPalette.Disabled, QPalette.HighlightedText, QColor(127, 127, 127))
        darkPalette.setColor(QPalette.Shadow, Qt.black)
        darkPalette.setColor(QPalette.Link, highlight.lighter(130))

        self.darkPalette = darkPalette
        self.defaultPalette = QApplication.instance().palette()
        self.togglePalette()
예제 #6
0
    def paint_NI(design_style, painter, option, c: QColor, w: int, h: int,
                 bounding_rect, title_rect):

        painter.setRenderHint(QPainter.Antialiasing)

        if design_style == 'extended':
            NIPainter_Ghostly.draw_NI_extended_background(
                painter, c, w, h, bounding_rect, title_rect)
        elif design_style == 'minimalistic':
            if option.state & QStyle.State_MouseOver:  # use special dark background color when mouse hovers
                NIPainter_Ghostly.draw_NI_minimalistic(
                    painter, c, w, h, background_color=c.darker())
            else:
                NIPainter_Ghostly.draw_NI_minimalistic(painter, c, w, h)
예제 #7
0
    def drawSquare(self, painter, x, y, shape):
        '''draws a square of a shape'''

        colorTable = [
            0x000000, 0xCC6666, 0x66CC66, 0x6666CC, 0xCCCC66, 0xCC66CC,
            0x66CCCC, 0xDAAA00
        ]

        color = QColor(colorTable[shape])
        painter.fillRect(x + 1, y + 1,
                         self.squareWidth() - 2,
                         self.squareHeight() - 2, color)

        painter.setPen(color.lighter())
        painter.drawLine(x, y + self.squareHeight() - 1, x, y)
        painter.drawLine(x, y, x + self.squareWidth() - 1, y)

        painter.setPen(color.darker())
        painter.drawLine(x + 1, y + self.squareHeight() - 1,
                         x + self.squareWidth() - 1,
                         y + self.squareHeight() - 1)
        painter.drawLine(x + self.squareWidth() - 1,
                         y + self.squareHeight() - 1,
                         x + self.squareWidth() - 1, y + 1)
예제 #8
0
class DesignGraphicsScene(CustomGraphicsScene):
    """A scene for the Design view.

    Mainly, it handles drag and drop events of ProjectItemDragMixin sources.
    """
    def __init__(self, parent, toolbox):
        """
        Args:
            parent (QObject): scene's parent object
            toolbox (ToolboxUI): reference to the main window
        """
        super().__init__(parent)
        self._toolbox = toolbox
        self.item_shadow = None
        self._last_selected_items = set()
        # Set background attributes
        settings = toolbox.qsettings()
        self.bg_choice = settings.value("appSettings/bgChoice",
                                        defaultValue="solid")
        bg_color = settings.value("appSettings/bgColor", defaultValue="false")
        self.bg_color = QColor("#f5f5f5") if bg_color == "false" else bg_color
        self.bg_origin = None
        self.link_drawer = LinkDrawer(toolbox)
        self.link_drawer.hide()
        self.connect_signals()

    def mouseMoveEvent(self, event):
        """Moves link drawer."""
        if self.link_drawer.isVisible():
            self.link_drawer.tip = event.scenePos()
            self.link_drawer.update_geometry()
            event.setButtons(
                Qt.NoButton
            )  # this is so super().mouseMoveEvent sends hover events to connector buttons
        super().mouseMoveEvent(event)

    def mousePressEvent(self, event):
        """Puts link drawer to sleep and log message if it looks like the user doesn't know what they're doing."""
        was_drawing = self.link_drawer.isVisible()
        super().mousePressEvent(event)
        if was_drawing and self.link_drawer.isVisible():
            self.link_drawer.sleep()
            if event.button() == Qt.LeftButton:
                self.emit_connection_failed()

    def mouseReleaseEvent(self, event):
        """Makes link if drawer is released over a valid connector button."""
        super().mouseReleaseEvent(event)
        if not self.link_drawer.isVisible(
        ) or self.link_drawer.src_connector.isUnderMouse():
            return
        if self.link_drawer.dst_connector is None:
            self.link_drawer.sleep()
            self.emit_connection_failed()
            return
        self.link_drawer.add_link()

    def emit_connection_failed(self):
        self._toolbox.msg_warning.emit(
            "Unable to make connection. Try landing the connection onto a valid connector button."
        )

    def keyPressEvent(self, event):
        """Puts link drawer to sleep if user presses ESC."""
        super().keyPressEvent(event)
        if self.link_drawer.isVisible() and event.key() == Qt.Key_Escape:
            self.link_drawer.sleep()

    def connect_signals(self):
        """Connect scene signals."""
        self.selectionChanged.connect(self.handle_selection_changed)

    def project_item_icons(self):
        return [
            item for item in self.items() if isinstance(item, ProjectItemIcon)
        ]

    @Slot()
    def handle_selection_changed(self):
        """Synchronizes selection with the project tree."""
        selected_items = set(self.selectedItems())
        if self._last_selected_items == selected_items:
            return
        self._last_selected_items = selected_items
        project_item_icons = []
        links = []
        for item in self.selectedItems():
            if isinstance(item, ProjectItemIcon):
                project_item_icons.append(item)
            elif isinstance(item, Link):
                links.append(item)
        # Set active project item, active link, and executed item in toolbox
        active_project_item = (self._toolbox.project_item_model.get_item(
            project_item_icons[0].name()).project_item
                               if len(project_item_icons) == 1 else None)
        active_link = links[0] if len(links) == 1 else None
        self._toolbox.refresh_active_elements(active_project_item, active_link)
        # Sync selection with project tree view
        selected_item_names = {icon.name() for icon in project_item_icons}
        self._toolbox.sync_item_selection_with_scene = False
        for ind in self._toolbox.project_item_model.leaf_indexes():
            item_name = self._toolbox.project_item_model.item(ind).name
            cmd = QItemSelectionModel.Select if item_name in selected_item_names else QItemSelectionModel.Deselect
            self._toolbox.ui.treeView_project.selectionModel().select(ind, cmd)
        self._toolbox.sync_item_selection_with_scene = True
        # Make last item selected the current index in project tree view
        if project_item_icons:
            last_ind = self._toolbox.project_item_model.find_item(
                project_item_icons[-1].name())
            self._toolbox.ui.treeView_project.selectionModel().setCurrentIndex(
                last_ind, QItemSelectionModel.NoUpdate)

    def set_bg_color(self, color):
        """Change background color when this is changed in Settings.

        Args:
            color (QColor): Background color
        """
        self.bg_color = color

    def set_bg_choice(self, bg_choice):
        """Set background choice when this is changed in Settings.

        Args:
            bg (str): "grid", "tree", or "solid"
        """
        self.bg_choice = bg_choice

    @staticmethod
    def _is_project_item_drag(source):
        """Checks whether or not source corresponds to a project item being dragged into the scene.
        """
        return isinstance(source, ProjectItemDragMixin)

    def dragLeaveEvent(self, event):
        """Accept event."""
        event.accept()

    def dragEnterEvent(self, event):
        """Accept event. Then call the super class method
        only if drag source is not a ProjectItemDragMixin."""
        event.accept()
        source = event.source()
        if not self._is_project_item_drag(source):
            super().dragEnterEvent(event)

    def dragMoveEvent(self, event):
        """Accept event. Then call the super class method
        only if drag source is not a ProjectItemDragMixin."""
        event.accept()
        source = event.source()
        if not self._is_project_item_drag(source):
            super().dragMoveEvent(event)

    def dropEvent(self, event):
        """Only accept drops when the source is an instance of ProjectItemDragMixin.
        Capture text from event's mimedata and show the appropriate 'Add Item form.'
        """
        source = event.source()
        if not self._is_project_item_drag(source):
            super().dropEvent(event)
            return
        if not self._toolbox.project():
            self._toolbox.msg.emit("Please open or create a project first")
            event.ignore()
            return
        event.acceptProposedAction()
        item_type, spec = event.mimeData().text().split(",")
        pos = event.scenePos()
        x = pos.x()
        y = pos.y()
        factory = self._toolbox.item_factories[item_type]
        self.item_shadow = factory.make_icon(self._toolbox)
        self.item_shadow.finalize("", x, y)
        self.addItem(self.item_shadow)
        self._toolbox.show_add_project_item_form(item_type, x, y, spec=spec)

    def event(self, event):
        """Accepts GraphicsSceneHelp events without doing anything, to not interfere with our usage of
        QToolTip.showText in graphics_items.ExclamationIcon.
        """
        if event.type() == QEvent.GraphicsSceneHelp:
            event.accept()
            return True
        return super().event(event)

    def drawBackground(self, painter, rect):
        """Reimplemented method to make a custom background.

        Args:
            painter (QPainter): Painter that is used to paint background
            rect (QRectF): The exposed (viewport) rectangle in scene coordinates
        """
        if self.bg_origin is None:
            self.bg_origin = rect.center()
        {
            "solid": self._draw_solid_bg,
            "grid": self._draw_grid_bg,
            "tree": self._draw_tree_bg
        }.get(self.bg_choice, self._draw_solid_bg)(painter, rect)

    def _draw_solid_bg(self, painter, rect):
        """Draws solid bg."""
        painter.fillRect(rect, QBrush(self.bg_color))

    def _draw_grid_bg(self, painter, rect):
        """Draws grid bg."""
        step = round(ProjectItemIcon.ITEM_EXTENT / 3)  # Grid step
        painter.setPen(QPen(self.bg_color))
        delta = rect.topLeft() - self.bg_origin
        x_start = round(delta.x() / step)
        y_start = round(delta.y() / step)
        x_stop = x_start + round(rect.width() / step) + 1
        y_stop = y_start + round(rect.height() / step) + 1
        for i in range(x_start, x_stop):
            x = step * i
            painter.drawLine(x, rect.top(), x, rect.bottom())
        for j in range(y_start, y_stop):
            y = step * j
            painter.drawLine(rect.left(), y, rect.right(), y)
        painter.setPen(QPen(self.bg_color.darker(110)))
        painter.drawLine(self.bg_origin.x(), rect.top(), self.bg_origin.x(),
                         rect.bottom())
        painter.drawLine(rect.left(), self.bg_origin.y(), rect.right(),
                         self.bg_origin.y())

    def _draw_tree_bg(self, painter, rect):
        """Draws 'tree of life' bg."""
        painter.setPen(QPen(self.bg_color))
        radius = ProjectItemIcon.ITEM_EXTENT
        dx = math.sin(math.pi / 3) * radius
        dy = math.cos(math.pi / 3) * radius
        delta = rect.topLeft() - self.bg_origin
        x_start = round(delta.x() / dx)
        y_start = round(delta.y() / radius)
        x_stop = x_start + round(rect.width() / dx) + 1
        y_stop = y_start + round(rect.height() / radius) + 1
        for i in range(x_start, x_stop):
            ref = QPointF(i * dx, (i & 1) * dy)
            for j in range(y_start, y_stop):
                painter.drawEllipse(ref + QPointF(0, j * radius), radius,
                                    radius)
        painter.setPen(QPen(self.bg_color.darker(110)))
        painter.drawEllipse(self.bg_origin, 2 * radius, 2 * radius)
예제 #9
0
    font.setPointSize(fontsize)
    fontinfo = QFontInfo(font)
    print("Selected font family:", fontinfo.family())
    print("Point size:", fontinfo.pointSize())
    app.setFont(font)

    # Apollo color palette
    app.setStyle("Fusion")
    palette = app.palette()
    basecolor = QColor("#888b8d")
    textcolor = QColor("#fff")
    palette.setColor(QPalette.WindowText, textcolor)
    palette.setColor(QPalette.Button, basecolor)
    #palette.setColor(QPalette.ButtonText, textcolor)
    palette.setColor(QPalette.Light, basecolor.lighter(150))
    palette.setColor(QPalette.Dark, basecolor.darker(150))
    palette.setColor(QPalette.Mid, basecolor)
    palette.setColor(QPalette.Text, basecolor.darker(250))
    #palette.setColor(QPalette.BrightText, textcolor)
    palette.setColor(QPalette.Base, basecolor.lighter(150))
    palette.setColor(QPalette.Window, basecolor)
    app.setPalette(palette)

    if sys.platform == "darwin":
        app.setStyleSheet(
            f"QLabel {{ font-size: 12px; font-family: {fontfamily}; }}")

    window = MainWindow(None)
    window.show()
    app.exec_()