Ejemplo n.º 1
0
    def setAniBox(self):
        # --动画ANI
        aniCombo = QComboBox(self)
        aniCombo.resize((self.width() - self.mobInfoLabel.width()) / 4, 19)
        aniCombo.move(0, self.height() - aniCombo.height())

        return aniCombo
Ejemplo n.º 2
0
    def __generateKeyWidget__(self):
        topWidget = QWidget()
        topLayout = QHBoxLayout()
        topLayout.setSpacing(0)
        topLayout.setContentsMargins(0, 0, 0, 0)
        topWidget.setLayout(topLayout)

        keyInput = QComboBox()
        keyInput.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum)
        keyInput.setEditable(True)
        keyInput.lineEdit().setPlaceholderText("'highway', 'name'...")
        keyInput.addItems(self.keyList)
        topLayout.addWidget(keyInput)

        filterOptionsButton = IconButton(
            QIcon(os.path.join(picturesDir, "options.png")),
            topWidget.windowHandle(), keyInput.height())
        filterOptionsButton.setStyleSheet(
            """QPushButton::menu-indicator{image: none;}""")

        filterOptionsMenu = QMenu()

        removeAct = QAction('Remove filter', self)
        removeAct.triggered.connect(self.deleteLater)
        filterOptionsMenu.addAction(removeAct)

        helpAct = QAction('Help', self)
        helpAct.triggered.connect(self.getInfo)
        filterOptionsMenu.addAction(helpAct)

        filterOptionsButton.setMenu(filterOptionsMenu)
        filterOptionsButton.setFlat(True)
        topLayout.addWidget(filterOptionsButton)

        return topWidget, keyInput
Ejemplo n.º 3
0
 def _init_combo_box(self, items, changed_callback, tooltip):
     combo_box = QComboBox()
     combo_box.setStyleSheet(open(STYLE_SHEET_PATH).read())
     combo_box.setToolTip(tooltip)
     combo_box.addItems(items)
     combo_box.setMinimumWidth(combo_box.width() * 0.35)
     combo_box.setMinimumHeight(combo_box.height() * 0.15)
     combo_box.currentTextChanged.connect(changed_callback)
     return combo_box
Ejemplo n.º 4
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        widget_width = window_width - canvas_width - 20
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)
        self.glWidget = GLWidget(self)

        self.TestLabel = QLabel('Test', parent=centralWidget)
        self.TestLabel.move(canvas_width + 10, 10)

        self.comboBoxTest = QComboBox(centralWidget)
        self.comboBoxTest.move(canvas_width + 10, 30)
        self.comboBoxTest.resize(widget_width, self.comboBoxTest.height())
        for item in test_options:
            self.comboBoxTest.addItem(item)
        self.comboBoxTest.currentTextChanged.connect(self.change_test_opt)

        self.FuncLabel = QLabel('Func parapeter', parent=centralWidget)
        self.FuncLabel.move(canvas_width + 10, 60)

        self.comboBoxFunc = QComboBox(centralWidget)
        self.comboBoxFunc.move(canvas_width + 10, 80)
        self.comboBoxFunc.resize(widget_width, self.comboBoxFunc.height())
        for item in func_options:
            self.comboBoxFunc.addItem(item)
        self.comboBoxFunc.currentTextChanged.connect(self.change_func_opt)

        self.SFactorLabel = QLabel('Sfactor parapeter', parent=centralWidget)
        self.SFactorLabel.move(canvas_width + 10, 60)

        self.comboBoxSFactor = QComboBox(centralWidget)
        self.comboBoxSFactor.move(canvas_width + 10, 80)
        self.comboBoxSFactor.resize(widget_width,
                                    self.comboBoxSFactor.height())
        for item in sfactor_options:
            self.comboBoxSFactor.addItem(item)
        self.comboBoxSFactor.currentTextChanged.connect(
            self.change_sfactor_opt)

        self.DFactorLabel = QLabel('Dfactor parapeter', parent=centralWidget)
        self.DFactorLabel.move(canvas_width + 10, 110)

        self.comboBoxDFactor = QComboBox(centralWidget)
        self.comboBoxDFactor.move(canvas_width + 10, 130)
        self.comboBoxDFactor.resize(widget_width,
                                    self.comboBoxDFactor.height())
        for item in dfactor_options:
            self.comboBoxDFactor.addItem(item)
        self.comboBoxDFactor.currentTextChanged.connect(
            self.change_dfactor_opt)

        self.RefLabel = QLabel('Ref parapeter', parent=centralWidget)
        self.RefLabel.move(canvas_width + 10, 110)

        self.sliderRef = QSlider(Qt.Horizontal, parent=centralWidget)
        self.sliderRef.setFocusPolicy(Qt.StrongFocus)
        self.sliderRef.move(canvas_width + 10, 130)
        self.sliderRef.resize(widget_width, self.sliderRef.height())
        self.sliderRef.valueChanged.connect(self.change_ref_opt)

        self.FuncLabel.hide()
        self.comboBoxFunc.hide()
        self.SFactorLabel.hide()
        self.comboBoxSFactor.hide()
        self.DFactorLabel.hide()
        self.comboBoxDFactor.hide()
        self.RefLabel.hide()
        self.sliderRef.hide()

        self.setWindowTitle("lab_2")
        self.resize(window_width, window_height)

    def change_test_opt(self, opt):
        self.glWidget.update_test_optin(test_options[opt])
        if opt == 'GL_SCISSOR_TEST':
            self.FuncLabel.hide()
            self.comboBoxFunc.hide()
            self.SFactorLabel.hide()
            self.comboBoxSFactor.hide()
            self.DFactorLabel.hide()
            self.comboBoxDFactor.hide()
            self.RefLabel.hide()
            self.sliderRef.hide()
        elif opt == 'GL_ALPHA_TEST':
            self.FuncLabel.show()
            self.comboBoxFunc.show()
            self.SFactorLabel.hide()
            self.comboBoxSFactor.hide()
            self.DFactorLabel.hide()
            self.comboBoxDFactor.hide()
            self.RefLabel.show()
            self.sliderRef.show()
        elif opt == 'GL_BLEND':
            self.FuncLabel.hide()
            self.comboBoxFunc.hide()
            self.SFactorLabel.show()
            self.comboBoxSFactor.show()
            self.DFactorLabel.show()
            self.comboBoxDFactor.show()
            self.RefLabel.hide()
            self.sliderRef.hide()
        self.glWidget.update()

    def change_func_opt(self, opt):
        self.glWidget.update_func_optin(func_options[opt])
        self.glWidget.update()

    def change_sfactor_opt(self, opt):
        self.glWidget.update_sfactor_optin(sfactor_options[opt])
        self.glWidget.update()

    def change_dfactor_opt(self, opt):
        self.glWidget.update_dfactor_optin(dfactor_options[opt])
        self.glWidget.update()

    def change_ref_opt(self, opt):
        self.glWidget.update_ref_optin(opt / 99)
        self.glWidget.update()
Ejemplo n.º 5
0
class GUIBasic(QWidget):
    def __init__(self):
        super().__init__()
        self.model = None

    def init_ui(self):
        self.resize(1200, 680)

        self.pic_list = ['maze7_1', 'maze7_2', 'maze7_3', 'maze10_1', 'maze10_2', 'maze10_3', 'maze11_1']
        self.timer = QBasicTimer()
        widget1 = QWidget(parent=self)
        widget1.setGeometry(QRect(30, 50, 800, 500))
        table_area = QGroupBox(parent=widget1)  # 图形显示区域
        table_area.setGeometry(QRect(widget1.x(), widget1.y(), widget1.width(), widget1.height()))

        self.Plot = DrawUI(width=3, height=3, dpi=100)
        gridlayout1 = QGridLayout(table_area)  # 继承容器groupBox
        gridlayout1.addWidget(self.Plot, 0, 1)

        pic_choose_label = QLabel(self)
        pic_choose_label.move(table_area.x() + table_area.width(), table_area.y() + 80)
        pic_choose_label.setText("Choose Maze:")
        pic_choose_label.setFont(QFont("Fixed", 10))
        self.pic_choose_combo = QComboBox(self)
        self.pic_choose_combo.move(pic_choose_label.geometry().x() + pic_choose_label.geometry().width() + 30,
                                   pic_choose_label.geometry().y() - 8)
        self.pic_choose_combo.resize(100, self.pic_choose_combo.geometry().height())
        self.pic_choose_combo.addItems(self.pic_list)
        self.pic_choose_combo.currentIndexChanged.connect(self.pic_change)
        self.pic_choose_combo.setFont(QFont("Fixed", 10))
        self.pic_change()

        middle_x = (
                           pic_choose_label.geometry().x() + self.pic_choose_combo.geometry().x() + self.pic_choose_combo.geometry().width()) / 2

        self.playing_index = -1
        self.problem_solving = False

        self.solve_problem_button = QPushButton(parent=self)
        self.solve_problem_button.setText("Train Now")
        self.solve_problem_button.move(pic_choose_label.geometry().x() + pic_choose_label.geometry().width() + 30,
                                       self.pic_choose_combo.y() + self.pic_choose_combo.height() + 100)
        self.solve_problem_button.pressed.connect(self.solve_button_pressed)
        self.solve_problem_button.setFont(QFont("Fixed", 10))

        self.solve_test = QLabel(parent=self)  # 解答过程中的信息显示
        self.solve_test.setText("Training...")
        self.solve_test.resize(400, self.solve_test.height())
        self.solve_test.setFont(QFont("Fixed", 9))
        self.solve_test.move(table_area.x() + table_area.width() - 20,
                             self.solve_problem_button.geometry().y() + self.solve_problem_button.geometry().height() + 20)
        self.solve_test.setHidden(True)

        speed_choose_label = QLabel(self)
        speed_choose_label.move(table_area.x() + table_area.width(), self.solve_test.geometry().y() + 40)
        speed_choose_label.setText("Play Speed:")
        speed_choose_label.setFont(QFont("Fixed", 10))
        self.play_speed_combo = QComboBox(self)
        self.play_speed_combo.move(speed_choose_label.geometry().x() + speed_choose_label.geometry().width() + 30,
                                   speed_choose_label.geometry().y() - 2)
        self.play_speed_combo.addItems(["High", "Middle", "Low"])
        self.play_speed_combo.setFont(QFont("Fixed", 10))

        play_button = QPushButton(self)
        play_button.setText("Play Result Now!")
        play_button.move(pic_choose_label.geometry().x() + pic_choose_label.geometry().width() + 30,
                         self.play_speed_combo.geometry().y() + self.play_speed_combo.geometry().height() + 40)
        play_button.pressed.connect(self.play_button_pressed)
        play_button.setFont(QFont("Fixed", 10))

    def pic_change(self):
        self.timer.stop()
        current_text = self.pic_choose_combo.currentText()
        maze = Mazes[current_text]
        my_maze = Maze(maze_map=np.array(maze), period=2)
        self.model = QTableModel(my_maze)

        # try:
        #     self.model.load_table('./Saved_QTable/' + current_text + '.npy')
        # except:
        #     QMessageBox.information(self, "提示", "没找到Q表保存文件", QMessageBox.Ok | QMessageBox.Close,
        #                             QMessageBox.Close)

        self.model.play_game((0, 0), 0)
        self.Plot.draw_root(self.model.my_maze, (0, 0), 1, 0, False)
        self.Plot.draw_qtable(qtable_model=self.model,
                              time_=self.model.my_maze.period - 1 if self.model.my_maze.period != 0 else 0,
                              fire_flag=True)

    def play_button_pressed(self):
        if self.model == None:
            QMessageBox.information(self, "Tip", "Please choose the Maze first.", QMessageBox.Ok | QMessageBox.Close,
                                    QMessageBox.Close)
            return

        self.model.play_game((0, 0), 0)
        speed_text = self.play_speed_combo.currentText()
        self.playing_index = 0
        if speed_text == "High":
            self.timer.start(100, self)
        elif speed_text == "Middle":
            self.timer.start(500, self)
        else:
            self.timer.start(1500, self)

    def timerEvent(self, event):
        if event.timerId() == self.timer.timerId():
            period = self.model.my_maze.period
            if period != 0 and (self.playing_index % period) >= period / 2:
                fire_flag = True
            else:
                fire_flag = False

            self.Plot.draw_qtable(self.model, self.playing_index % period if period != 0 else 0, fire_flag)
            self.Plot.draw_root(self.model.my_maze, (0, 0), self.playing_index, period, fire_flag)

            self.playing_index = self.playing_index + 1

            if self.playing_index >= len(self.model.my_maze.visited) + 2:
                self.playing_index = 0
                # print("up",self.playing_index)
        else:
            super(GUIBasic, self).timerEvent(event)

    def solve_button_pressed(self):
        if self.problem_solving:
            return
        if type(self.model) == type(None):
            QMessageBox.information(self, "Tip", "Please choose the Maze first.", QMessageBox.Ok | QMessageBox.Close,
                                    QMessageBox.Close)
            return

        self.problem_solving = True
        self.playing_index = -1
        self.solve_test.setHidden(False)
        self.timer.stop()
        self.repaint()

        start_time = time.time()
        # path = "tangrams\\" + self.parent().pic_choose_combo.currentText() + ".png"
        self.model.train(output_line=self.solve_test, main_ui=self)
        end_time = time.time()

        QMessageBox.information(self, "Tip", "Training finished,spend:%.3f s" % (end_time - start_time),
                                QMessageBox.Ok | QMessageBox.Close, QMessageBox.Close)

        self.Plot.draw_qtable(qtable_model=self.model,
                              time_=self.model.my_maze.period - 1 if self.model.my_maze.period != 0 else 0,
                              fire_flag=True)
        self.problem_solving = False
        self.solve_test.setHidden(True)
Ejemplo n.º 6
0
class Window():
    
    defaultRegion = "North America"
    labelFont = QFont("Lucida Sans", 16, QFont.Bold)
    buttonFont = QFont("Lucida Sans", 10, QFont.Thin)
    inputFont = QFont("Century Gothic", 10, QFont.Thin)
    
    def __init__(self, version, width=600, height=420, dense = 6, title="Pie Legends", isDark=False):
        
        self.app = QApplication(sys.argv)
        self._window = QMainWindow()
        
        self.dense = dense
        
        self.window.statusBar().showMessage('Initiating..')
        self.initWindow(width, height, title, version, isDark)
        self.window.statusBar().showMessage('Ready..')
        
        sys.exit(self.app.exec_())
    
    @property
    def window(self):
        return self._window;

    def initWindow(self, width, height, title, version, isDark):       
        
        self.window.setWindowTitle(title  + " " + version)
        
        self.sizeWindow(width, height)
        
        self.window.statusBar().setSizeGripEnabled(False)
        
        self.centerWindow();
        
        self.window.setAutoFillBackground(True)
        self.window.setBackgroundRole(QPalette.AlternateBase if isDark else QPalette.Dark)
        
        self.window.setWindowIcon(QIcon('../assets/favicon.png'))
        
        QToolTip.setFont(QFont('SansSerif', 10))
        
        self.initCentralWidget(isDark);
        
        self.window.show()
        
    def sizeWindow(self, width, height):
        self.window.resize(width, height)
        self.window.setMaximumSize(width, height)
        self.window.setMinimumSize(width, height)
        self.window.setFixedSize(width, height)
        
    def centerWindow(self):
        qr = self.window.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.window.move(qr.topLeft())
        
    def initCentralWidget(self, isDark):
        
        """ Logo """
        self.window.setCentralWidget(QWidget())
        self.window.centralWidget().setAutoFillBackground(True)
        self.window.centralWidget().setBackgroundRole(QPalette.Dark if isDark else QPalette.AlternateBase)
        
        self.picLabel = QLabel(self.window.centralWidget())
        pic = QPixmap("../assets/logo.png")
        self.picLabel.setPixmap(pic)
        self.picLabel.move(self.window.width()/2-pic.width()/2, 15)
        
        funcLine = pic.height()+50;
        
        
        
        
        """ Champion Section """
        
        """ Initiate """
        self.championLabel = QLabel(self.window.centralWidget())
        self.championLabel.setText("Enter Champion")
        self.championLabel.setFont(self.labelFont)
        
        championLabelWidth = self.championLabel.fontMetrics().boundingRect(self.championLabel.text()).width()
        championLabelHeight = self.championLabel.fontMetrics().boundingRect(self.championLabel.text()).height()
        
        self.championEdit = QLineEdit(self.window.centralWidget())
        self.championEdit.setFont(self.inputFont)
        
        self.countersBtn = QPushButton('Counters', self.window.centralWidget())
        self.countersBtn.setToolTip('Champion counters!')
        self.countersBtn.resize(self.countersBtn.sizeHint())
        self.countersBtn.setFont(self.buttonFont)
        
        self.buildsBtn = QPushButton('Builds', self.window.centralWidget())
        self.buildsBtn.setToolTip('Champion builds!')
        self.buildsBtn.setFont(self.buttonFont)
        
        """ Resize """
        self.buildsBtn.resize(self.buildsBtn.sizeHint())
        self.championEdit.resize(self.countersBtn.width() + self.buildsBtn.width(), 20)
        
        """ Move """
        self.championEdit.move(self.window.width()/self.dense, funcLine + championLabelHeight + 3)
        
        self.countersBtn.move(self.championEdit.x(), self.championEdit.y() + self.countersBtn.height())
        
        self.championLabel.move(self.championEdit.x()+self.championEdit.width()/2-championLabelWidth/2, funcLine)
        
        self.buildsBtn.move(self.championEdit.x() + self.countersBtn.width(), self.championEdit.y() + self.buildsBtn.height())
        
        """ Event Handling """
        self.buildsBtn.clicked.connect(self.handleBuildsBtn)
        self.countersBtn.clicked.connect(self.handleCountersBtn)
        
        self.championEdit.returnPressed.connect(self.countersBtn.click)
        
        
        
        
        """ Player Section """
        
        """ Initiate """
        self.playerLabel = QLabel(self.window.centralWidget())
        self.playerLabel.setText("Enter Player")
        
        self.playerLabel.setFont(self.labelFont)
        
        playerLabelWidth = self.playerLabel.fontMetrics().boundingRect(self.playerLabel.text()).width()
        playerLabelHeight = self.playerLabel.fontMetrics().boundingRect(self.playerLabel.text()).height()
        
        self.regionCheck = QComboBox(self.window.centralWidget())
        self.regionCheck.addItems(["North America", "Europe West", "EU Nordic & East", "Korea", "Russia", "Oceania", "Brazil", "Turkey", "Latin America North", "Latin America South"])
        self.regionCheck.setCurrentText("North America")
        PieLegends.regionUpdate(self.regionCheck.currentText())
        
        self.playerEdit = QLineEdit(self.window.centralWidget())
        self.playerEdit.setFont(self.inputFont)
        
        self.playerBtn = QPushButton('Search', self.window.centralWidget())
        self.playerBtn.setToolTip('Pie a player!')
        self.playerBtn.setFont(self.buttonFont)
        
        """ Resize """
        self.playerBtn.resize(self.playerBtn.sizeHint())
        self.playerEdit.resize(self.playerBtn.width()*2, 20)
        
        """ Move """
        self.regionCheck.move(0, funcLine + playerLabelHeight + 3) # We move the Y first
        
        playerEditWidth = self.playerEdit.frameGeometry().width()
        
        self.playerEdit.move(self.window.width()-self.window.width()/self.dense-playerEditWidth, self.regionCheck.y() + self.regionCheck.height()-6)
        
        self.playerLabel.move(self.playerEdit.x() + self.playerEdit.width()/2 - playerLabelWidth/2, funcLine)
        
        self.regionCheck.move(self.playerEdit.x(), self.regionCheck.y()) # Now we move just the X after all the sizes been formed
        
        self.playerBtn.move(self.playerEdit.x() + self.playerEdit.width()/2 - self.playerBtn.width()/2, self.playerEdit.y() + self.playerBtn.height())
        
        """ Event Handling """
        self.playerBtn.clicked.connect(self.handlePlayerBtn)
        
        self.playerEdit.returnPressed.connect(self.playerBtn.click)
    
        self.regionCheck.activated[str].connect(self.handleRegionCheck)
    
    
    """ Buttons - Event Handling Methods """      
    def handleBuildsBtn(self):
        PieLegends.championBuilds(self.championEdit.text())
    
    def handleCountersBtn(self):
        PieLegends.championCounters(self.championEdit.text())
        
    def handlePlayerBtn(self):
        PieLegends.playerPie(self.playerEdit.text())
        
    """ Combo Box - Event Handling Methods """
    def handleRegionCheck(self, region):
        PieLegends.regionUpdate(region)
        
        
Ejemplo n.º 7
0
class GlueMarkWidget(QGroupBox):
    def __init__(self, title: str, *args, **kwargs):

        super().__init__(title, *args, **kwargs)
        layout = QGridLayout()
        self.setLayout(layout)

        font_layout = QHBoxLayout(self)
        self.font_size = QSpinBox(self)
        self.font_size.setMinimum(5)
        self.font_size.setMaximum(100)
        self.font_size.setValue(Defaults.FONT_SIZE)

        self.font = QComboBox(self)
        for font in sorted(font_manager.ttflist, key=lambda x: x.face.name):
            self.font.addItem(
                QIcon(appctxt.get_resource("files/font.png")),
                font.face.name.decode("ascii"),
                font,
            )

        font_layout.addWidget(self.font, 3)
        font_layout.addWidget(self.font_size, 1)
        font_layout.setContentsMargins(0, 0, 0, 0)

        font_widget = QWidget(self)
        font_widget.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Minimum)
        font_widget.setMaximumHeight(self.font.height())
        font_widget.setContentsMargins(0, 0, 0, 0)
        font_widget.setLayout(font_layout)
        layout.addWidget(QLabel("Schrift", self), 0, 0)
        layout.addWidget(font_widget, 0, 1, 1, 2)

        layout.addWidget(QLabel("Marker", self), 4, 0)
        self.marker_type_x = QComboBox(self)
        self.marker_type_y = QComboBox(self)

        for name, marker in MARKERS.items():
            marker_icon = QIcon(appctxt.get_resource(f"markers/{name}.png"))
            self.marker_type_x.addItem(marker_icon, name, marker)
            self.marker_type_y.addItem(marker_icon, name, marker)

        layout.addWidget(self.marker_type_x, 4, 1)
        layout.addWidget(self.marker_type_y, 4, 2)

        layout.addWidget(QLabel("Beschriftungen", self), 5, 0)
        self.marker_labels_x = QComboBox(self)
        self.marker_labels_y = QComboBox(self)

        for name, marker_set in MARKER_SETS.items():
            label_icon = QIcon(appctxt.get_resource(f"labels/{name}.png"))
            self.marker_labels_x.addItem(label_icon, name, marker_set)
            self.marker_labels_y.addItem(label_icon, name, marker_set)

        layout.addWidget(self.marker_labels_x, 5, 1)
        layout.addWidget(self.marker_labels_y, 5, 2)

        layout.addWidget(QLabel("Größe innen", self), 6, 0)
        self.marker_inner_size = QSlider(Qt.Horizontal, self)
        self.marker_inner_size.setMinimum(10)
        self.marker_inner_size.setMaximum(240)
        self.marker_inner_size.valueChanged.connect(self.validate_outer_size)
        marker_inner_size_label = QLabel(self)
        self.marker_inner_size.valueChanged.connect(
            lambda x: marker_inner_size_label.setText(f"{x} pt"))
        layout.addWidget(self.marker_inner_size, 6, 1)
        layout.addWidget(marker_inner_size_label, 6, 2)

        layout.addWidget(QLabel("Größe außen", self), 7, 0)
        self.marker_outer_size = QSlider(Qt.Horizontal, self)
        self.marker_outer_size.setMinimum(15)
        self.marker_outer_size.setMaximum(250)
        self.marker_outer_size.valueChanged.connect(self.validate_inner_size)
        marker_outer_size_label = QLabel(self)
        self.marker_outer_size.valueChanged.connect(
            lambda x: marker_outer_size_label.setText(f"{x} pt"))
        layout.addWidget(self.marker_outer_size, 7, 1)
        layout.addWidget(marker_outer_size_label, 7, 2)

        self.marker_inner_size.setValue(35)
        self.marker_outer_size.setValue(45)

    def update_widget_state(self):
        for widget in [
                self.marker_type_x,
                self.marker_type_y,
                self.marker_labels_x,
                self.marker_labels_y,
                self.marker_inner_size,
                self.marker_outer_size,
        ]:
            widget.setEnabled(self.marker_enabled.isChecked())

    def validate_inner_size(self):
        inner_size = self.marker_inner_size.value()
        outer_size = self.marker_outer_size.value()
        if inner_size >= outer_size - 5:
            self.marker_inner_size.setValue(outer_size - 5)

    def validate_outer_size(self):
        inner_size = self.marker_inner_size.value()
        outer_size = self.marker_outer_size.value()
        if outer_size <= inner_size + 5:
            self.marker_outer_size.setValue(inner_size + 5)