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