class TopPanel(QFrame): def __init__(self, maze_widget=None): super().__init__() self.setMaximumHeight(150) self._manager = Manager() self._maze_widget = maze_widget layout = QHBoxLayout() layout.setContentsMargins(20, 20, 20, 20) self.add_algorithm_group(layout) self.add_mode_group(layout) self.add_width_heigth_fields(layout) self.add_generate_button(layout) self.setLayout(layout) def generate_new_maze(self): try: height = int(self._height_field.text()) width = int(self._width_field.text()) except ValueError: return if height <= 0 or width <= 0: return self._maze_widget.update_labyrinth( self._manager.generate_new_maze(height, width)) # Method for adding subwidgets in layout def add_algorithm_group(self, layout): self._DFS_radio = QRadioButton("DFS") self._prim_radio = QRadioButton("Prim") self._DFS_radio.setChecked(True) self._DFS_radio.clicked.connect( lambda f: self._manager.set_generator(DFSGenerator())) self._prim_radio.clicked.connect( lambda f: self._manager.set_generator(PrimGenerator())) self._algorithm_group = QGroupBox("Choose algorithm") group_layout = QVBoxLayout() group_layout.addWidget(self._DFS_radio) group_layout.addWidget(self._prim_radio) self._algorithm_group.setLayout(group_layout) layout.addStretch() layout.addWidget(self._algorithm_group) layout.addStretch() # Method for adding subwidgets in layout def add_mode_group(self, layout): self._auto_radio = QRadioButton("Auto solve") self._manual_radio = QRadioButton("Manual") self._auto_radio.setChecked(True) self._auto_radio.clicked.connect(lambda f: self._maze_widget.set_mode( MazeWidget.WorkMode.AUTO_SOLVE)) self._manual_radio.clicked.connect( lambda f: self._maze_widget.set_mode(MazeWidget.WorkMode. MANUAL_SOLVE)) self._mode_group = QGroupBox("Mode") group_layout = QVBoxLayout() group_layout.addWidget(self._auto_radio) group_layout.addWidget(self._manual_radio) self._mode_group.setLayout(group_layout) layout.addStretch() layout.addWidget(self._mode_group) layout.addStretch() # Method for adding subwidgets in layout def add_width_heigth_fields(self, layout): layout.addStretch() inner_layout = QGridLayout() self._width_label = QLabel("Width") self._height_label = QLabel("Height") self._width_field = QLineEdit() self._height_field = QLineEdit() inner_layout.addWidget(self._width_label, 0, 0, 1, 1) inner_layout.addWidget(self._width_field, 0, 1, 1, 1) inner_layout.addWidget(self._height_label, 1, 0, 1, 1) inner_layout.addWidget(self._height_field, 1, 1, 1, 1) layout.addLayout(inner_layout) # Method for adding subwidgets in layout def add_generate_button(self, layout): layout.addStretch() layout.addStretch() self._generate_button = QPushButton("Generate!") self._generate_button.clicked.connect( lambda f: self.generate_new_maze()) layout.addWidget(self._generate_button) layout.addStretch()