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()
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()
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)
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())
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)
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)
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))