Example #1
0
    def Gague_Value_ColorChange(self):

        # 打开颜色识获器
        my_color_picker = ColorPicker(useAlpha=False)
        picker_color = my_color_picker.rgb2hex(my_color_picker.getColor())
        # print("------->")
        # print(picker_color)

        value_color = '#' + picker_color

        self.label_value.setStyleSheet('color:' + value_color + '; background: transparent;')

        # 将数值颜色写入Config json文件
        with open('./gaguge_config.json', 'r', encoding='utf8') as read_congfig_file:
            str = read_congfig_file.read()
            json_data = json.loads(str)
            self.pointer_color = json_data['pointer_color']
            json_data['value_color'] = value_color
            write_json =  json_data
        with  open('./gaguge_config.json','w+',encoding = 'utf-8') as congfig_file:
            json.dump(write_json, congfig_file, indent=4, sort_keys=True)

        # 生成新的home_page.xml文件
        with  open('./meter_images/home_page.xml','w',encoding = 'utf-8') as f:
            f.write('''<?xml ruler_y="220" ruler_x="297,42,-439,-112"?>
<window name="home_page" style:normal:bg_color="#FFFFFF">
<guage name="guage" x="0" y="0" w="320" h="240" draw_type="scale_auto" image="voltmeter">
    <guage_pointer name="guage_pointer" x="294" y="10" w="7" h="420" value="0" angle="-90" anchor_x="0.5" anchor_y="0.5" animation="value(easing=bounce_out,from=0,to=-90)" min="-90" max="0" style:normal:fg_color="#00000000" style:normal:bg_color="''' + self.pointer_color + '''" image="pointer_2" style:normal:border="all" style:normal:border_color="#00000000"/>
</guage>
<label name="val" x="221" y="155" w="89" h="75" style:normal:font_size="30" style:normal:text_color="'''+ value_color +'''" style:normal:text_align_h="right" visible="true" min="0" max="40" enable="true" style:normal:font_name="default" text="0"/>
</window>''')
            f.close()
Example #2
0
    def pick_color(self, mode):

        cp = ColorPicker()
        self.unfocusGui()

        if mode == "diffuse":
            try:
                oldr, oldg, oldb = (int(self.ui.difx.text()),
                                    int(self.ui.dify.text()),
                                    int(self.ui.difz.text()))
            except:
                oldr, oldg, oldb = (0, 0, 0)
            r, g, b = cp.getColor((oldr, oldg, oldb))
            self.ui.difx.setText(str(int(r)))
            self.ui.dify.setText(str(int(g)))
            self.ui.difz.setText(str(int(b)))

        if mode == "specular":
            try:
                oldr, oldg, oldb = (int(self.ui.specx.text()),
                                    int(self.ui.specy.text()),
                                    int(self.ui.specz.text()))
            except:
                oldr, oldg, oldb = (0, 0, 0)
            r, g, b = cp.getColor((oldr, oldg, oldb))
            self.ui.specx.setText(str(int(r)))
            self.ui.specy.setText(str(int(g)))
            self.ui.specz.setText(str(int(b)))

        if mode == "emission":
            try:
                oldr, oldg, oldb = (int(self.ui.emisx.text()),
                                    int(self.ui.emisy.text()),
                                    int(self.ui.emisz.text()))
            except:
                oldr, oldg, oldb = (0, 0, 0)
            r, g, b = cp.getColor((oldr, oldg, oldb))
            self.ui.emisx.setText(str(int(r)))
            self.ui.emisy.setText(str(int(g)))
            self.ui.emisz.setText(str(int(b)))

        self.focusGui()
Example #3
0
    def Gague_Pointer_ColorChange(self):

        # 打开颜色识获器
        my_color_picker = ColorPicker(useAlpha=False)
        picker_color = my_color_picker.rgb2hex(my_color_picker.getColor())
        # print("------->")
        # print(picker_color)

        pointer_color = '#' + picker_color

        # 生成新的svg图形
        with  open('./meter_images/dx.svg','w',encoding = 'utf-8') as f:
            f.write('<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5.67 127.56"><defs><style>.cls-1,.cls-2{fill:'+ pointer_color + ';}.cls-2{stroke:#000;stroke-miterlimit:10;stroke-width:0.25px;}</style></defs><title>指针45</title><polygon class="cls-1" points="5.67 127.56 0 127.56 2.83 0 4.25 63.78 5.67 127.56"/><polygon class="cls-1" points="1.42 63.78 2.83 63.78 4.25 63.78 5.67 127.56 0 127.56 1.42 63.78"/><polygon class="cls-2" points="1.42 63.78 4.25 63.78 2.83 0 1.42 63.78"/></svg>')
            f.close()

        # 将表盘指针颜色写入Config json文件
        with open('./gaguge_config.json', 'r', encoding='utf8') as read_congfig_file:
            str_temp = read_congfig_file.read()
            json_data = json.loads(str_temp)
            self.value_color = json_data['value_color']
            self.value_min = json_data['value_min']
            self.value_max = json_data['value_max']
            value_min_str = str(self.value_min)
            value_max_str = str(self.value_max)
            json_data['pointer_color'] = pointer_color
            write_json =  json_data
        with  open('./gaguge_config.json','w+',encoding = 'utf-8') as congfig_file:
            json.dump(write_json, congfig_file, indent=4, sort_keys=True)


        # 生成新的home_page.xml文件
        with  open('./meter_images/home_page.xml','w',encoding = 'utf-8') as f:
            f.write('''<?xml ruler_y="220" ruler_x="297,42,-439,-112"?>
<window name="home_page" style:normal:bg_color="#FFFFFF">
<guage name="guage" x="0" y="0" w="320" h="240" draw_type="scale_auto" image="voltmeter">
    <guage_pointer name="guage_pointer" x="294" y="10" w="7" h="420" value="0" angle="-90" anchor_x="0.5" anchor_y="0.5" animation="value(easing=bounce_out,from=0,to=-90)" min="-90" max="0" style:normal:fg_color="#00000000" style:normal:bg_color="''' + pointer_color + '''" image="pointer_2" style:normal:border="all" style:normal:border_color="#00000000"/>
</guage>
<label name="val" x="221" y="155" w="89" h="75" style:normal:font_size="30" style:normal:text_color="'''+ self.value_color +'''" style:normal:text_align_h="right" visible="true" min="'''+ value_min_str + '''" max="'''+ value_max_str + '''" enable="true" style:normal:font_name="default" text="0"/>
</window>''')
            f.close()

        # 刷新表盘指针svg
        defaultPix2 = QtGui.QPixmap("./meter_images/dx.svg")
        # 旋转pix
        self.rotation = -45
        self.transform = QtGui.QTransform().rotate(self.rotation)
        defaultPix2 = defaultPix2.transformed(self.transform, QtCore.Qt.SmoothTransformation)
        self.label_pointer.setPixmap(defaultPix2)
Example #4
0
    def openColorDialog(self):
        # color = QColorDialog.getColor()

        # if color.isValid():
        #     # print(color.name())
        #     print(color.name())
        #     color_R = color.red()
        #     color_G = color.green()
        #     color_B = color.blue()
        #     self.udp_send[40] = color_R
        #     self.udp_send[41] = color_G
        #     self.udp_send[42] = color_B
        #     # print(color_R)

        my_color_picker = ColorPicker(useAlpha=False)
        my_color_picker.DX_Color_OutSingal.connect(self.dx_color)
        picked_color = my_color_picker.hsv2hex(my_color_picker.getColor())
Example #5
0
from colorpicker import ColorPicker
from PyQt5.QtWidgets import QApplication

app = QApplication([])

my_color_picker = ColorPicker(useAlpha=True)
my_color_picker_light = ColorPicker(lightTheme=True)

old_color = (255, 255, 255, 50)
picked_color = my_color_picker.getColor(old_color)
print(picked_color)

old_color = (255, 0, 255)
picked_color = my_color_picker_light.getColor(old_color)
print(picked_color)

# Don't have your color in RGB format?
my_color = (50, 50, 100, 60)  # HSV Color in percent
old_color = my_color_picker.hsv2rgb(my_color)
picked_color = my_color_picker.rgb2hsv(my_color_picker.getColor(old_color))
print(picked_color)
Example #6
0
class ColorPalette(QWidget):
    """Represents a palette of colors

    :param source:  Subject source of the palette, either sprite or tile
    :type source:   Source
    :param parent:  Parent widget, defaults to None
    :type parent:   QWidget, optional
    """

    palette_updated = pyqtSignal(str)
    color_selected = pyqtSignal(int)

    def __init__(self, source, parent=None):
        super().__init__(parent)
        self.source = source
        self.grid = QGridLayout()
        self.grid.setSpacing(0)
        self.grid.setContentsMargins(0, 0, 0, 0)
        self.picker = ColorPicker(self)
        self.color_preview = ColorPreview(self.source, self)
        self.color_preview.switch.connect(self.switchColors)
        self.palette = [Color(n, self.source, self) for n in range(16)]
        positions = [(row, col) for row in range(4) for col in range(4)]
        for position, swatch in zip(positions, self.palette):
            swatch.color_selected.connect(self.selectColor)
            swatch.edit.connect(self.openPicker)
            self.grid.addWidget(swatch, *position)
        self.enabled = False
        self.main_layout = QHBoxLayout()
        self.main_layout.addLayout(self.grid)
        self.main_layout.addWidget(self.color_preview)
        self.main_layout.setContentsMargins(0, 0, 5, 0)
        self.main_layout.setSpacing(19)
        self.setLayout(self.main_layout)

    def setup(self, data):
        """Sets up the data source for the palette and initial selection

        :param data:    Data source of palette
        :type data:     GameData
        """
        self.data = data
        self.data.col_pal_updated.connect(self.setPalette)
        self.palette[0].select()

    @pyqtSlot(int, QColor)
    def openPicker(self, index, orig_color):
        """Handles opening the color picker after double-clicking on a color

        :param index:       Index of the color selected
        :type index:        int
        :param orig_color:  Original color of the selection color
        :type orig_color:   QColor
        """
        self.picker.setColor(orig_color)
        self.picker.preview_color.connect(
            lambda orig_color: self.previewColor(index, orig_color)
        )
        if self.picker.exec():
            new_color = self.picker.getColor()
            self.sendColorUpdate(index, new_color, orig_color)
        else:
            self.previewColor(index, orig_color)
        self.picker.preview_color.disconnect()

    @pyqtSlot(int, QColor)
    def sendColorUpdate(self, index, new_color, orig_color=None):
        """Sends color update to centralized GameData data

        :param index:       Index of changed color in palette
        :type index:        int
        :param new_color:   Color to be changed to
        :type new_color:    QColor
        :param orig_color:  Original color, defaults to None
        :type orig_color:   QColor, optional
        """
        self.data.setColor(
            self.current_palette, index, new_color, self.source, orig_color
        )

    @pyqtSlot(QColor)
    def previewColor(self, index, color):
        """Triggers preview of color throughout application when interacting
        with color picker

        :param index:   Index of the color being changed
        :type index:    int
        :param color:   Color to be previewed
        :type color:    QColor
        """
        self.data.previewColor(self.current_palette, index, color, self.source)

    @pyqtSlot(Source, str)
    def setPalette(self, source, palette):
        """Sets the overall color palette colors

        :param source:  Subject source of color palette, either sprite or tile
        :type source:   Source
        :param palette: Name of the color palette to be set to
        :type palette:  str
        """
        if source is not self.source:
            return
        self.current_palette = palette
        widgets = [
            self.grid.itemAt(index) for index in range(self.grid.count())
        ]
        for color, widget in zip(
            self.data.getColPal(self.current_palette, self.source), widgets
        ):
            widget.widget().fill(color)
            index = widgets.index(widget)
            if index == self.color_preview.primary_index:
                self.color_preview.setPrimaryColor(
                    color
                    if (index != 0 or self.source is Source.TILE)
                    else QColor(Qt.magenta)
                )
            if index == self.color_preview.secondary_index:
                self.color_preview.setSecondaryColor(
                    color
                    if (index != 0 or self.source is Source.TILE)
                    else QColor(Qt.magenta)
                )
        if self.source is Source.SPRITE:
            self.grid.itemAt(0).widget().fill(QColor(Qt.magenta))
        self.palette_updated.emit(self.current_palette)

    @pyqtSlot()
    def switchColors(self):
        """Switches the active color between the primary and secondary colors
        """
        pindex = self.color_preview.primary_index
        pcolor = self.color_preview.primary_color
        sindex = self.color_preview.secondary_index
        scolor = self.color_preview.secondary_color
        self.selectColor(sindex, scolor, Qt.LeftButton)
        self.selectColor(pindex, pcolor, Qt.RightButton)

    @pyqtSlot(int, QColor, Qt.MouseButton)
    def selectColor(self, index, color, button):
        """Selects a primary or secondary color from the palette

        :param index:   Index of the chosen color
        :type index:    int
        :param color:   Color chosen
        :type color:    QColor
        :param button:  Which mouse button was used to select the primary or
                        secondary color
        :type button:   Qt.MouseButton
        """
        if button == Qt.LeftButton:
            self.color_preview.setPrimaryColor(color)
            self.color_preview.setPrimaryIndex(index)
            for idx in range(self.grid.count()):
                if idx != index:
                    self.grid.itemAt(idx).widget().deselect()
                else:
                    self.grid.itemAt(idx).widget().select()
            self.color_selected.emit(index)
        elif button == Qt.RightButton:
            self.color_preview.setSecondaryColor(color)
            self.color_preview.setSecondaryIndex(index)
Example #7
0
class UI_MainWindow(QMainWindow):
    def __init__(self):
        super(UI_MainWindow, self).__init__()
        self.currentShow = ""
        self.picked_color = (255, 255, 255)
        self.setupUi(self)

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(656, 820)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.app = QApplication([])

        self.dialog = QFileDialog()

        self.saveButton = QtWidgets.QPushButton(self.centralwidget)
        self.saveButton.setGeometry(QtCore.QRect(120, 700, 131, 41))
        self.saveButton.setObjectName("saveButton")
        self.saveButton.clicked.connect(lambda: self.save())

        self.newButton = QtWidgets.QPushButton(self.centralwidget)
        self.newButton.setGeometry(QtCore.QRect(410, 700, 131, 41))
        self.newButton.setObjectName("newButton")
        self.newButton.clicked.connect(lambda: self.resetScreen())

        self.title = QtWidgets.QTextBrowser(self.centralwidget)
        self.title.setGeometry(QtCore.QRect(100, 10, 461, 61))
        self.title.setObjectName("title")

        self.seriesInput = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.seriesInput.setGeometry(QtCore.QRect(100, 110, 371, 31))
        self.seriesInput.setObjectName("seriesInput")

        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(100, 90, 71, 16))
        self.label.setObjectName("label")

        self.errorLabel = QtWidgets.QLabel(self.centralwidget)
        self.errorLabel.setGeometry(QtCore.QRect(300, 200, 71, 16))
        self.errorLabel.setObjectName("error")
        self.errorLabel.setStyleSheet("color: red")

        self.colourInput = QtWidgets.QLabel(self.centralwidget)
        self.colourInput.setGeometry(QtCore.QRect(190, 160, 81, 51))
        self.colourInput.setObjectName("BlockColor")
        self.borderStylesheet()

        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(100, 140, 101, 16))
        self.label_2.setObjectName("label_2")

        self.seriesNameEnter = QtWidgets.QPushButton(self.centralwidget)
        self.seriesNameEnter.setGeometry(QtCore.QRect(480, 110, 81, 31))
        self.seriesNameEnter.setObjectName("seriesNameEnter")
        self.seriesNameEnter.clicked.connect(lambda: self.createImage())

        self.colourEnter = QtWidgets.QPushButton(self.centralwidget)
        self.colourEnter.setGeometry(QtCore.QRect(100, 160, 81, 51))
        self.colourEnter.setObjectName("colourEnter")
        self.colourEnter.clicked.connect(lambda: self.getColor())

        MainWindow.setCentralWidget(self.centralwidget)

        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 656, 21))
        self.menubar.setObjectName("menubar")

        self.imgLabel = QtWidgets.QLabel(self.centralwidget)
        self.imgLabel.setGeometry(120, 230, 400, 400)
        self.imgLabel.setObjectName('image')
        self.imgLabel.setText("")
        self.imgLabel.setScaledContents(True)

        self.menuFile = QtWidgets.QMenu(self.menubar)
        self.menuFile.setObjectName("menuFile")

        MainWindow.setMenuBar(self.menubar)

        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")

        MainWindow.setStatusBar(self.statusbar)

        self.actionSave = QtWidgets.QAction(MainWindow)
        self.actionSave.setObjectName("actionSave")

        self.actionNew = QtWidgets.QAction(MainWindow)
        self.actionNew.setObjectName("actionNew")

        self.menuFile.addAction(self.actionSave)
        self.menuFile.addAction(self.actionNew)

        self.menubar.addAction(self.menuFile.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.actionNew.triggered.connect(lambda: self.resetScreen())

        self.actionSave.triggered.connect(lambda: self.save())

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(
            _translate("MainWindow", "Series rating generator."))
        self.saveButton.setText(_translate("MainWindow", "Save"))
        self.newButton.setText(_translate("MainWindow", "New"))
        self.title.setHtml(
            _translate(
                "MainWindow",
                "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
                "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
                "p, li { white-space: pre-wrap; }\n"
                "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
                "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:28pt; font-weight:600;\">Series Rating Generator</span></p></body></html>"
            ))
        self.label.setText(_translate("MainWindow", "Series name"))
        self.errorLabel.setText(_translate("MainWindow", ""))
        self.seriesNameEnter.setText(_translate("MainWindow", "Enter"))
        self.colourEnter.setText(_translate("MainWindow", "Choose a color"))
        self.menuFile.setTitle(_translate("MainWindow", "File"))
        self.actionSave.setText(_translate("MainWindow", "Save"))
        self.actionSave.setStatusTip(_translate("MainWindow", "Save image"))
        self.actionSave.setShortcut(_translate("MainWindow", "Ctrl+S"))
        self.actionNew.setText(_translate("MainWindow", "New"))
        self.actionNew.setStatusTip(_translate("MainWindow", "New Image"))
        self.actionNew.setShortcut(_translate("MainWindow", "Ctrl+N"))

    def createImage(self):
        text = self.seriesInput.toPlainText()
        colour = '#%02x%02x%02x' % self.picked_color

        text = text.rstrip()
        text = text.lstrip()
        self.clearExceptions()

        if text != '':
            try:
                picture = CreatePicture(text, colour)
                picture.createImage()
                self.updatePhoto(text)
                self.currentShow = text
            except KeyError:
                self.updateErrorLabel(
                    'Enter a valid series (Movies dont work)')
        else:
            self.updateErrorLabel('Enter a valid series')

    def updateErrorLabel(self, text):
        self.errorLabel.setText(text)
        self.errorLabel.adjustSize()

    def updatePhoto(self, name):
        if self.currentShow != "":
            try:
                os.remove(self.currentShow + '.png')
            except FileNotFoundError:
                pass
        self.imgLabel.setPixmap(QtGui.QPixmap(name + '.png'))

    def resetScreen(self):
        self.imgLabel.setPixmap(QtGui.QPixmap(""))
        self.seriesInput.appendPlainText("")
        self.picked_color = (255, 255, 255)
        self.borderStylesheet()
        self.clearExceptions()

        try:
            os.remove(self.currentShow + '.png')
        except FileNotFoundError:
            pass

    def getColor(self):
        self.color_picker = ColorPicker()
        self.picked_color = self.color_picker.getColor()
        self.picked_color = tuple([int(x) for x in self.picked_color])
        self.borderStylesheet()

    def save(self):

        if self.currentShow != "":
            dir = self.chooseDir()
            show = self.currentShow + '.png'
            shutil.copy(show, dir)
            os.remove(show)
        else:
            self.updateErrorLabel('Please create a poster before saving')

    def chooseDir(self):
        self.dialog = QFileDialog()
        folder_path = self.dialog.getExistingDirectory(None, "Select Folder")
        return folder_path

    def closeEvent(self, event):
        if self.currentShow != "":
            try:
                os.remove(self.currentShow + '.png')
            except FileNotFoundError:
                pass

    def clearExceptions(self):
        self.errorLabel.setText("")

    def borderStylesheet(self):
        self.colourInput.setStyleSheet(
            """QWidget {{border: 1px solid black; border-radius: 2px; background-color: rgb{};}} """
            .format(self.picked_color))