class AliasLayout(QGridLayout): new_color = Signal(str) def __init__(self): super().__init__() self.alias_editor = QLineEdit() self.alias_editor.setMaxLength(32) # noinspection PyUnresolvedReferences self.alias_editor.returnPressed.connect(self.alias_editor.clearFocus) self.addWidget(QLabel('LN Node Alias'), column=1, column_span=1) self.addWidget(self.alias_editor, column=2, column_span=2, same_row=True) self.addWidget(QLabel('LN Node Color'), column=1, column_span=1) self.color_label = QLabel() self.color_label.setAutoFillBackground(True) self.color_label.setFixedSize(10, 10) self.addWidget(self.color_label, column_span=1, column=2, same_row=True) self.select_color_button = QPushButton('Select color') # noinspection PyUnresolvedReferences self.select_color_button.clicked.connect(self.select_color) self.addWidget(self.select_color_button, column=3, column_span=1, same_row=True) self.color_dialog = QColorDialog(self.parentWidget()) def select_color(self): color = self.color_dialog.getColor() if color.isValid(): self.set_palette(color) self.color_dialog.setCurrentColor(color) # noinspection PyUnresolvedReferences self.new_color.emit(color.name()) def set_alias(self, text: str): self.alias_editor.setText(text) def set_color(self, color_hex: str): color = QColor(color_hex) if color.isValid(): self.set_palette(color) self.color_dialog.setCurrentColor(color) def set_palette(self, color: QColor): palette = self.color_label.palette() palette.setColor(QPalette.Background, color) self.color_label.setPalette(palette)
class MainWindow(QMainWindow): # Variável armazena a última cor selecionada. last_color = Qt.white def __init__(self): super().__init__() # Título da janela. self.setWindowTitle('PySide2 QColorDialog().') # Ícone da janela principal icon = QIcon() icon.addPixmap(QPixmap('../../../images/icons/icon.png')) self.setWindowIcon(icon) # Tamanho inicial da janela. screen_size = app.desktop().geometry() # screen_size = app.primaryScreen().geometry() width = screen_size.width() height = screen_size.height() self.resize(width / 2, height / 2) # Tamanho mínimo da janela. self.setMinimumSize(width / 2, height / 2) # Tamanho maximo da janela. self.setMaximumSize(width - 200, height - 200) # Widget central. widget = QWidget() self.setCentralWidget(widget) # Widgets. vbox = QVBoxLayout() widget.setLayout(vbox) self.label = QLabel('Cor selecionada') self.label.setAutoFillBackground(True) self.label.setAlignment(Qt.AlignCenter) vbox.addWidget(self.label) button = QPushButton('Abrir diálogo de seleção de cor') button.clicked.connect(self.open_dialog) vbox.addWidget(button) def open_dialog(self): color = QColorDialog().getColor( parent=self, title='Selecione uma cor', initial=self.last_color, ) if color.isValid(): self.last_color = color palette = self.label.palette() palette.setColor(QPalette.Background, color) self.label.setPalette(palette)
class ResultWidget(QWidget): def __init__(self, route=None): super().__init__() layout = QVBoxLayout() self.route = route self.thread_pool = QThreadPool() layout_send = QHBoxLayout() self.send_button = QPushButton('Send') self.send_button.clicked.connect(self.make_request) self.search_line = QLineEdit() self.search_line.setPlaceholderText('Search') self.search_line.textChanged.connect(self.search_result_reset) self.search_line.returnPressed.connect(self.search_result) self.response_status_label = QLabel() self.response_status_label.setFont(FONT_ROUTE) self.response_status_label.hide() self.elapsed_time_label = QLabel() self.elapsed_time_label.setFont(FONT_ROUTE) self.elapsed_time_label.hide() self.search_summary_label = QLabel() self.search_summary_label.setFont(FONT_ROUTE) self.search_summary_label.hide() if route is not None: layout_send.addWidget(self.send_button) layout_send.addWidget(self.response_status_label) layout_send.addWidget(self.elapsed_time_label) layout_send.addStretch(1) layout_send.addWidget(self.search_summary_label) layout_send.addWidget(self.search_line) layout.addLayout(layout_send) self.result_text_edit = ResultTextEdit() self.result_text_edit.setReadOnly(True) self.result_text_edit.setFont(TEXT_FONT) self.result_text_edit.setContextMenuPolicy(Qt.NoContextMenu) self.result_text_edit.search.connect(self.focus) self.shortcut = QShortcut(QKeySequence("Ctrl+Return"), self, self.make_request) self.result_text_edit.setUndoRedoEnabled(False) self.highlighter = TextHighlighter(self.result_text_edit.document()) layout.addWidget(self.result_text_edit) if route is not None: saved_result = load_request_result(route) self.result_text_edit.setPlainText(saved_result) self.setLayout(layout) def goto(self, to): c = self.result_text_edit.textCursor() c.movePosition(to, QTextCursor.MoveAnchor, 1) self.result_text_edit.setTextCursor(c) def search_result_reset(self): self.goto(QTextCursor.Start) string_format = QTextCharFormat() string_format.setBackground(QColor('#668B8B')) extras = [] self.search_positions = [] while True: extra = QTextEdit.ExtraSelection() found = self.result_text_edit.find(self.search_line.text()) if not found: break extra.cursor = self.result_text_edit.textCursor() extra.format = string_format self.search_positions.append(extra.cursor.position()) extras.append(extra) self.result_text_edit.setExtraSelections(extras) self.goto(QTextCursor.Start) self.search_result() def search_result(self): p = self.result_text_edit.palette() p.setColor(QPalette.Highlight, QColor("#ee799f")) self.result_text_edit.setPalette(p) search_settings = QTextDocument.FindFlags() mod = QApplication.keyboardModifiers() if (mod & Qt.ShiftModifier) != 0: search_settings |= QTextDocument.FindBackward r = self.result_text_edit.find(self.search_line.text(), search_settings) if not r: if (mod & Qt.ShiftModifier) != 0: self.goto(QTextCursor.End) else: self.goto(QTextCursor.Start) self.result_text_edit.find(self.search_line.text(), search_settings) if self.search_line.text() == '': self.search_summary_label.hide() return current_position = self.result_text_edit.textCursor().position() try: current_index = self.search_positions.index(current_position) except ValueError: current_index = -1 self.search_summary_label.show() self.search_summary_label.setText( '%s/%s' % (current_index + 1, len(self.search_positions))) def focus(self): self.search_line.setFocus() self.search_line.selectAll() def make_request(self): self.response_status_label.hide() self.elapsed_time_label.hide() self.result_text_edit.setPlainText('Loading..') try: group_values, route_values = get_parameter_values_for_route( self.route) request = self.route.get_request(group_values, route_values) worker = RequestWorker( request.method, request.url, params=request.params, headers=request.headers, json=request.json, ) worker.signals.result.connect(self.set_result) self.thread_pool.start(worker) except CaribouException as e: self.result_text_edit.setPlainText(str(e)) except Exception: self.result_text_edit.setPlainText(traceback.format_exc()) def set_result(self, text, status_code, elapsed_time): if status_code == 0: self.response_status_label.hide() self.elapsed_time_label.hide() else: p = self.response_status_label.palette() if status_code == 200: self.response_status_label.setText(str(status_code) + ' OK') p.setColor(QPalette.WindowText, QColor('#1FDA9A')) else: self.response_status_label.setText(str(status_code) + ' ERROR') p.setColor(QPalette.WindowText, QColor('#DB3340')) self.response_status_label.setPalette(p) self.response_status_label.show() self.elapsed_time_label.setText('%s ms' % int(elapsed_time * 1000)) self.elapsed_time_label.show() self.result_text_edit.setUpdatesEnabled(False) self.result_text_edit.setPlainText(text) self.result_text_edit.setUpdatesEnabled(True) save_request_result(self.route, text) persist_storage()
class StatsWidget(QFrame): def __init__(self, controller): QFrame.__init__(self) self.controller = controller self.controller.flagsCountChanged.connect(self.update_flags_count) self.controller.gameReset.connect(self.reset_timer) self.timer_val = 0 self.timer = QTimer() self.timer.timeout.connect(self.increment_timer) self.timer.start(1000) self.flags = QLabel("0") self.flags.setFixedWidth(50) self.flags.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.flags.setAutoFillBackground(True) flagsFont = self.flags.font() flagsFont.setPixelSize(28) self.flags.setFont(flagsFont) flagsPalette = self.flags.palette() flagsPalette.setColor(QPalette.Foreground, Qt.red) flagsPalette.setColor(QPalette.Window, Qt.black) self.flags.setPalette(flagsPalette) self.reset = QPushButton() self.reset.setFixedSize(45, 45) self.reset.clicked.connect(self.restart_game) self.seconds = QLabel("0") self.seconds.setFixedWidth(50) self.seconds.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.seconds.setAutoFillBackground(True) secondsFont = self.seconds.font() secondsFont.setPixelSize(28) self.seconds.setFont(secondsFont) secondsPalette = self.seconds.palette() secondsPalette.setColor(QPalette.Foreground, Qt.red) secondsPalette.setColor(QPalette.Window, Qt.black) self.seconds.setPalette(secondsPalette) self.layout = QHBoxLayout() self.layout.setContentsMargins(5, 0, 5, 0) self.layout.setSpacing(0) self.layout.addWidget(self.flags) self.layout.addSpacerItem(QSpacerItem(100, 10, QSizePolicy.Maximum)) self.layout.addWidget(self.reset) self.layout.addSpacerItem(QSpacerItem(100, 10, QSizePolicy.Maximum)) self.layout.addWidget(self.seconds) self.setLayout(self.layout) def update_flags_count(self, count): self.flags.setText(str(count)) def reset_timer(self): self.timer.stop() self.timer_val = 0 self.seconds.setText(str(self.timer_val)) self.timer.start() def increment_timer(self): self.timer_val += 1 self.seconds.setText(str(self.timer_val)) def restart_game(self): self.controller.restart_game()
class Dashboard(QWidget): def __init__(self): super().__init__() self.layout = QGridLayout() self.setMaximumHeight(300) # View available_cameras = self.get_available_cameras() self.available_cameras_combobox = QComboBox() self.available_cameras_combobox.addItems(available_cameras) self.layout.addWidget(QLabel("Camera:"), 1, 0, Qt.AlignRight) self.layout.addWidget(self.available_cameras_combobox, 1, 1) # HSV color self.hsv_min_hue_sb = QSpinBox(minimum=0, maximum=255, value=DEFAULT_HSV_MIN_HUE) self.hsv_max_hue_sb = QSpinBox(minimum=0, maximum=255, value=DEFAULT_HSV_MAX_HUE) self.hsv_min_value_sb = QSpinBox(minimum=0, maximum=255, value=DEFAULT_HSV_MIN_VALUE) self.hsv_max_value_sb = QSpinBox(minimum=0, maximum=255, value=DEFAULT_HSV_MAX_VALUE) self.hsv_min_saturation_sb = QSpinBox(minimum=0, maximum=255, value=DEFAULT_HSV_MIN_SATURATION) self.hsv_max_saturation_sb = QSpinBox(minimum=0, maximum=255, value=DEFAULT_HSV_MAX_SATURATION) self.hsv_min_hue_s = QSlider(minimum=0, maximum=255, value=DEFAULT_HSV_MIN_HUE, orientation=Qt.Horizontal) self.hsv_max_hue_s = QSlider(minimum=0, maximum=255, value=DEFAULT_HSV_MAX_HUE, orientation=Qt.Horizontal) self.hsv_min_value_s = QSlider( minimum=0, maximum=255, value=DEFAULT_HSV_MIN_VALUE, orientation=Qt.Horizontal, ) self.hsv_max_value_s = QSlider( minimum=0, maximum=255, value=DEFAULT_HSV_MAX_VALUE, orientation=Qt.Horizontal, ) self.hsv_min_saturation_s = QSlider( minimum=0, maximum=255, value=DEFAULT_HSV_MIN_SATURATION, orientation=Qt.Horizontal, ) self.hsv_max_saturation_s = QSlider( minimum=0, maximum=255, value=DEFAULT_HSV_MAX_SATURATION, orientation=Qt.Horizontal, ) max_width = 300 self.hsv_min_hue_sb.setMaximumWidth(max_width) self.hsv_max_hue_sb.setMaximumWidth(max_width) self.hsv_min_value_sb.setMaximumWidth(max_width) self.hsv_max_value_sb.setMaximumWidth(max_width) self.hsv_min_saturation_sb.setMaximumWidth(max_width) self.hsv_max_saturation_sb.setMaximumWidth(max_width) self.hsv_min_hue_s.setMaximumWidth(max_width) self.hsv_max_hue_s.setMaximumWidth(max_width) self.hsv_min_value_s.setMaximumWidth(max_width) self.hsv_max_value_s.setMaximumWidth(max_width) self.hsv_min_saturation_s.setMaximumWidth(max_width) self.hsv_max_saturation_s.setMaximumWidth(max_width) self.layout.addWidget(QLabel("Min"), 0, 3, Qt.AlignBottom | Qt.AlignHCenter) self.layout.addWidget(QLabel("Max"), 0, 4, Qt.AlignBottom | Qt.AlignHCenter) self.layout.addWidget(QLabel("Hue:"), 1, 2, Qt.AlignRight) self.layout.addWidget(self.hsv_min_hue_sb, 1, 3) self.layout.addWidget(self.hsv_max_hue_sb, 1, 4) self.layout.addWidget(self.hsv_min_hue_s, 2, 3) self.layout.addWidget(self.hsv_max_hue_s, 2, 4) self.layout.addWidget(QLabel("Value:"), 3, 2, Qt.AlignRight) self.layout.addWidget(self.hsv_min_value_sb, 3, 3) self.layout.addWidget(self.hsv_max_value_sb, 3, 4) self.layout.addWidget(self.hsv_min_value_s, 4, 3) self.layout.addWidget(self.hsv_max_value_s, 4, 4) self.layout.addWidget(QLabel("Saturation:"), 5, 2, Qt.AlignRight) self.layout.addWidget(self.hsv_min_saturation_sb, 5, 3) self.layout.addWidget(self.hsv_max_saturation_sb, 5, 4) self.layout.addWidget(self.hsv_min_saturation_s, 6, 3) self.layout.addWidget(self.hsv_max_saturation_s, 6, 4) # Color selection self.current_color = QLabel() self.current_color.setFixedSize(50, 50) self.current_color.setAutoFillBackground(True) self.layout.addWidget(QLabel("Current color:"), 1, 5, Qt.AlignRight) self.layout.addWidget(self.current_color, 1, 6) self.selected_color = QLabel() self.selected_color.setFixedSize(50, 50) self.selected_color.setAutoFillBackground(True) self.layout.addWidget(QLabel("Base filtered color:"), 2, 5, Qt.AlignRight) self.layout.addWidget(self.selected_color, 2, 6) self.lower_filtered_color = QLabel() self.lower_filtered_color.setFixedSize(50, 50) self.lower_filtered_color.setAutoFillBackground(True) self.layout.addWidget(QLabel("Lower filtered color:"), 3, 5, Qt.AlignRight) self.layout.addWidget(self.lower_filtered_color, 3, 6) self.upper_filtered_color = QLabel() self.upper_filtered_color.setFixedSize(50, 50) self.upper_filtered_color.setAutoFillBackground(True) self.layout.addWidget(QLabel("Upper filtered color:"), 4, 5, Qt.AlignRight) self.layout.addWidget(self.upper_filtered_color, 4, 6) self.setLayout(self.layout) self.hsv_min_hue_sb.valueChanged.connect(self.update_hsv) self.hsv_min_hue_sb.valueChanged.connect(self.hsv_min_hue_s.setValue) self.hsv_min_hue_s.valueChanged.connect(self.hsv_min_hue_sb.setValue) self.hsv_max_hue_sb.valueChanged.connect(self.update_hsv) self.hsv_max_hue_sb.valueChanged.connect(self.hsv_max_hue_s.setValue) self.hsv_max_hue_s.valueChanged.connect(self.hsv_max_hue_sb.setValue) self.hsv_min_value_sb.valueChanged.connect(self.update_hsv) self.hsv_min_value_sb.valueChanged.connect( self.hsv_min_value_s.setValue) self.hsv_min_value_s.valueChanged.connect( self.hsv_min_value_sb.setValue) self.hsv_max_value_sb.valueChanged.connect(self.update_hsv) self.hsv_max_value_sb.valueChanged.connect( self.hsv_max_value_s.setValue) self.hsv_max_value_s.valueChanged.connect( self.hsv_max_value_sb.setValue) self.hsv_min_saturation_sb.valueChanged.connect(self.update_hsv) self.hsv_min_saturation_sb.valueChanged.connect( self.hsv_min_saturation_s.setValue) self.hsv_min_saturation_s.valueChanged.connect( self.hsv_min_saturation_sb.setValue) self.hsv_max_saturation_sb.valueChanged.connect(self.update_hsv) self.hsv_max_saturation_sb.valueChanged.connect( self.hsv_max_saturation_s.setValue) self.hsv_max_saturation_s.valueChanged.connect( self.hsv_max_saturation_sb.setValue) def get_available_cameras(self): available_cameras = [""] q_camera_info = QCameraInfo() for available_camera in q_camera_info.availableCameras(): device_name = available_camera.deviceName() available_cameras.append(device_name) return available_cameras # ----------------------------------------------------------------------------- # --- SLOTS # ----------------------------------------------------------------------------- def set_current_color(self, r, g, b): palette = QPalette() palette.setColor(QPalette.Background, QColor(r, g, b)) self.current_color.setPalette(palette) def set_selected_color(self, r, g, b): palette = QPalette() palette.setColor(QPalette.Background, QColor(r, g, b)) self.selected_color.setPalette(palette) def update_hsv(self, _): color = self.selected_color.palette().color(QPalette.Background) r, g, b = color.red(), color.green(), color.blue() lower_hsv, upper_hsv = rgb_to_hsv_range( r, g, b, min_h=self.hsv_min_hue_sb.value(), max_h=self.hsv_max_hue_sb.value(), min_s=self.hsv_min_saturation_sb.value(), max_s=self.hsv_max_saturation_sb.value(), min_v=self.hsv_min_value_sb.value(), max_v=self.hsv_max_value_sb.value(), ) r, g, b = hsv_to_rgb(*lower_hsv) palette = QPalette() palette.setColor(QPalette.Background, QColor(r, g, b)) self.lower_filtered_color.setPalette(palette) r, g, b = hsv_to_rgb(*upper_hsv) palette = QPalette() palette.setColor(QPalette.Background, QColor(r, g, b)) self.upper_filtered_color.setPalette(palette)