def initUI(self): # Инициализация элементов GUI radio_button_circle = QRadioButton('Круг') radio_button_circle.setChecked(True) radio_button_square = QRadioButton('Квадрат') radio_button_triangle = QRadioButton('Треугольник') combo_box_color = QComboBox() combo_box_color.addItems(['Белый', 'Черный', 'Зеленый', 'Синий', 'Красный']) label_rotate = QLabel('Поворот') label_size = QLabel('Размер') label_move_y = QLabel('Перемещение: ось Y') label_move_x = QLabel('Перемещение: ось X') horizontal_slider_rotate = QSlider(Qt.Horizontal, self) horizontal_slider_rotate.setMaximum(360) horizontal_slider_size = QSlider(Qt.Horizontal, self) horizontal_slider_size.setProperty("value", 50) horizontal_slider_move_x = QSlider(Qt.Horizontal, self) horizontal_slider_move_x.setMaximum(500) horizontal_slider_move_x.setProperty("value", 0) horizontal_slider_move_y = QSlider(Qt.Horizontal, self) horizontal_slider_move_y.setMaximum(500) horizontal_slider_move_y.setProperty("value", 0) lcd_number_rotate = QLCDNumber() lcd_number_rotate.setSegmentStyle(QtWidgets.QLCDNumber.Flat) lcd_number_rotate.setProperty("intValue", 0) lcd_number_size = QLCDNumber() lcd_number_size.setSegmentStyle(QtWidgets.QLCDNumber.Flat) lcd_number_size.setProperty("intValue", 50) lcd_number_move_x = QLCDNumber() lcd_number_move_x.setSegmentStyle(QtWidgets.QLCDNumber.Flat) lcd_number_move_x.setProperty("intValue", 0) lcd_number_move_y = QLCDNumber() lcd_number_move_y.setSegmentStyle(QtWidgets.QLCDNumber.Flat) lcd_number_move_y.setProperty("intValue", 0) # Инициадизация графической сцены graphics_view = QGraphicsView() scene = QGraphicsScene() graphics_view.setScene(scene) # Применение варианта расположения элементов GUI grid = QGridLayout() grid.setSpacing(10) # Добавление элементов GUI grid.addWidget(radio_button_circle, 0, 0) grid.addWidget(label_rotate, 0, 1) grid.addWidget(horizontal_slider_rotate, 0, 2) grid.addWidget(lcd_number_rotate, 0, 3) grid.addWidget(radio_button_square, 1, 0) grid.addWidget(label_size, 1, 1) grid.addWidget(horizontal_slider_size, 1, 2) grid.addWidget(lcd_number_size, 1, 3) grid.addWidget(radio_button_triangle, 2, 0) grid.addWidget(label_move_x, 2, 1) grid.addWidget(horizontal_slider_move_x, 2, 2) grid.addWidget(lcd_number_move_x, 2, 3) grid.addWidget(combo_box_color, 3, 0) grid.addWidget(label_move_y, 3, 1) grid.addWidget(horizontal_slider_move_y, 3, 2) grid.addWidget(lcd_number_move_y, 3, 3) grid.addWidget(graphics_view, 4, 0, 4, 4) # Связь элементов GUI между собой horizontal_slider_size.valueChanged.connect(lcd_number_size.display) horizontal_slider_rotate.valueChanged.connect(lcd_number_rotate.display) horizontal_slider_move_x.valueChanged.connect(lcd_number_move_x.display) horizontal_slider_move_y.valueChanged.connect(lcd_number_move_y.display) def rotate(): # получение значения со слайдера r = horizontal_slider_rotate.sliderPosition() # получение статуса радиокнопок и выполнение нужного действия if radio_button_circle.isChecked(): circle1.rotate_circle(r) elif radio_button_square.isChecked(): square1.rotate_square(r) elif radio_button_triangle.isChecked(): triangle1.rotate_triangle(r) else: print('error') print('rotate: ', r) def move(): # получение значения со слайдера m = horizontal_slider_move_x.sliderPosition() n = horizontal_slider_move_y.sliderPosition() # получение статуса радиокнопок и выполнение нужного действия if radio_button_circle.isChecked(): circle1.move_circle(m, n) elif radio_button_square.isChecked(): square1.move_square(m, n) elif radio_button_triangle.isChecked(): triangle1.move_triangle(m, n) else: print('error') print('move: ', m, ' : ', n) def scale(): # получение значения со слайдера s = horizontal_slider_size.sliderPosition() # получение статуса радиокнопок и выполнение нужного действия if radio_button_circle.isChecked(): circle1.scale_circle(s) elif radio_button_square.isChecked(): square1.scale_square(s) elif radio_button_triangle.isChecked(): triangle1.scale_triangle(s) else: print('error') print('scale: ', s) def recolor(): # получение значения с комбобокса color = combo_box_color.currentText() if color == 'Белый': r = 255 g = 255 b = 255 elif color == 'Черный': r = 0 g = 0 b = 0 elif color == 'Зеленый': r = 0 g = 255 b = 0 elif color == 'Синий': r = 0 g = 0 b = 255 elif color == 'Красный': r = 255 g = 0 b = 0 else: r = 0 g = 0 b = 0 # получение статуса радиокнопок и выполнение нужного действия if radio_button_circle.isChecked(): circle1.recolor_circle(r, g, b) elif radio_button_square.isChecked(): square1.recolor_square(r, g, b) elif radio_button_triangle.isChecked(): triangle1.recolor_triangle(r, g, b) else: print('error') print('recolor: ', color) # Отрисовка square1 = Square(0, 0, 250, 250) square1.draw_square(scene) circle1 = Сircle(0, 0, 250, 250) circle1.draw_circle(scene) triangle1 = Triangle(0, 0, 0, 250, 250, 250) triangle1.draw_triangle(scene) # Активация функций слайдерами и комбобоксу horizontal_slider_rotate.valueChanged.connect(rotate) horizontal_slider_size.valueChanged.connect(scale) horizontal_slider_move_x.valueChanged.connect(move) horizontal_slider_move_y.valueChanged.connect(move) combo_box_color.currentTextChanged.connect(recolor) self.setLayout(grid) self.setGeometry(0, 0, 700, 700) self.setWindowTitle('Review') self.show()
class UiGameFrame(QFrame): def __init__(self, parent): super(UiGameFrame, self).__init__(parent) self.setupUi() def setupUi(self): # 游戏界面 self.setGeometry(QRect(10, 10, 671, 711)) # self.setStyleSheet("background-image: url(./img/bg.bmp);") self.setFrameShape(QFrame.Box) self.setFrameShadow(QFrame.Sunken) self.setLineWidth(2) self.setObjectName("uiGameFrame") # 房间信息 self.game_info = QLabel(self) self.game_info.setGeometry(QRect(20, 5, 631, 40)) self.game_info.setObjectName("gameInfo") self.game_info.setScaledContents(True) self.game_info.setStyleSheet( 'font-size:20px;font-weight:bold;') self.game_info.setAlignment(Qt.AlignCenter | Qt.AlignTop) # 游戏画面 self.game_frame = QFrame(self) self.game_frame.setGeometry(QRect(80, 145, 504, 504)) # self.game_frame.setStyleSheet("background-image: url(./img/game.bmp);") self.game_frame.setFrameShape(QFrame.Box) self.game_frame.setFrameShadow(QFrame.Plain) self.game_frame.setObjectName("gameFrame") # 对战 self.vs_frame = QFrame(self) self.vs_frame.setGeometry(QRect(50, 55, 270, 80)) self.vs_frame.setFrameShape(QFrame.StyledPanel) self.vs_frame.setFrameShadow(QFrame.Raised) self.vs_frame.setObjectName("vsFrame") # self.vs_frame.setStyleSheet("border:1px solid;") self.vs_user_image = QLabel(self.vs_frame) self.vs_user_image.setGeometry(QRect(5, 5, 70, 70)) self.vs_user_image.setObjectName("vsUserImage") self.vs_user_image.setScaledContents(True) self.vs_user_info = QLabel(self.vs_frame) self.vs_user_info.setGeometry(QRect(80, 5, 120, 70)) self.vs_user_info.setObjectName("vsUserInfo") self.lcdNumber_l = QLCDNumber(self.vs_frame) self.lcdNumber_l.setGeometry(QRect(205, 5, 60, 70)) self.lcdNumber_l.setLineWidth(0) self.lcdNumber_l.setDigitCount(2) self.lcdNumber_l.setSegmentStyle(QLCDNumber.Flat) self.lcdNumber_l.setProperty("intValue", 20) self.lcdNumber_l.setObjectName("lcdNumber_2") self.vs_frame_r = QFrame(self) self.vs_frame_r.setGeometry(QRect(350, 55, 270, 80)) self.vs_frame_r.setFrameShape(QFrame.StyledPanel) self.vs_frame_r.setFrameShadow(QFrame.Raised) self.vs_frame_r.setObjectName("vsFrameR") # self.vs_frame_r.setStyleSheet("border:1px solid;") self.lcdNumber_r = QLCDNumber(self.vs_frame_r) self.lcdNumber_r.setGeometry(QRect(5, 5, 60, 70)) self.lcdNumber_r.setLineWidth(0) self.lcdNumber_r.setDigitCount(2) self.lcdNumber_r.setSegmentStyle(QLCDNumber.Flat) self.lcdNumber_r.setProperty("intValue", 20) self.lcdNumber_r.setObjectName("lcdNumber_3") self.vs_user_image_r = QLabel(self.vs_frame_r) self.vs_user_image_r.setGeometry(QRect(70, 5, 70, 70)) self.vs_user_image_r.setObjectName("vsUserImageR") self.vs_user_image_r.setScaledContents(True) self.vs_user_info_r = QLabel(self.vs_frame_r) self.vs_user_info_r.setGeometry(QRect(145, 5, 120, 70)) self.vs_user_info_r.setObjectName("vsUserInfoR") # 按钮区域 self.cmd_frame = QFrame(self) self.cmd_frame.setGeometry(QRect(55, 655, 560, 47)) self.cmd_frame.setFrameShape(QFrame.StyledPanel) self.cmd_frame.setFrameShadow(QFrame.Raised) self.cmd_frame.setObjectName("cmdFrame") # 开始按钮 self.gameStartBtn = QPushButton(self.cmd_frame) self.gameStartBtn.setGeometry(QRect(10, 10, 100, 27)) self.gameStartBtn.setObjectName("gameStartBtn") # 悔棋按钮 self.gameUndoBtn = QPushButton(self.cmd_frame) self.gameUndoBtn.setGeometry(QRect(120, 10, 100, 27)) self.gameUndoBtn.setObjectName("gameUndoBtn") # 认输按钮 self.gameGiveupBtn = QPushButton(self.cmd_frame) self.gameGiveupBtn.setGeometry(QRect(230, 10, 100, 27)) self.gameGiveupBtn.setObjectName("gameGiveupBtn") # 返回大厅 self.gameReHallBtn = QPushButton(self.cmd_frame) self.gameReHallBtn.setGeometry(QRect(340, 10, 100, 27)) self.gameReHallBtn.setObjectName("gameReHallBtn") # 设置 self.gameSetBtn = QPushButton(self.cmd_frame) self.gameSetBtn.setGeometry(QRect(450, 10, 100, 27)) self.gameSetBtn.setObjectName("gameSetBtn") self.retranslateUi() QMetaObject.connectSlotsByName(self) def retranslateUi(self): _translate = QCoreApplication.translate self.gameStartBtn.setText(_translate("MainWindow", "开始游戏")) self.gameUndoBtn.setText(_translate("MainWindow", "悔棋")) self.gameGiveupBtn.setText(_translate("MainWindow", "认输")) self.gameReHallBtn.setText(_translate("MainWindow", "返回大厅")) self.gameSetBtn.setText(_translate("MainWindow", "设置"))
def init_ui(self): self.buttonBox = QDialogButtonBox(self) self.buttonBox.setGeometry(-70, 260, 341, 32) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.gridLayoutWidget_2 = QWidget(self) self.gridLayoutWidget_2.setGeometry(130, 20, 121, 91) self.gridLayout_2 = QGridLayout(self.gridLayoutWidget_2) self.gridLayout_2.setContentsMargins(0, 0, 0, 0) for i, row in enumerate([('Высота', 'Ширина', 'Мины'), *self.modes.values()]): for j, col in enumerate(row): label = QLabel(self.gridLayoutWidget_2) label.setText(str(col)) label.setAlignment(QtCore.Qt.AlignCenter) self.gridLayout_2.addWidget(label, i, j, 1, 1) mode_label = QLabel(self) mode_label.setGeometry(QtCore.QRect(65, 20, 61, 18)) mode_label.setText('Режим') mode_label.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter) self.buttonGroup = QButtonGroup(self) checkbutton_list = [] for n, key in enumerate([*self.modes.keys(), 'Особый']): rb = QRadioButton(self) self.buttonGroup.addButton(rb) rb.setGeometry(60, 45 + 25 * n, 71, 17) rb.setText(key) checkbutton_list.append(rb) self.easy, self.normal, self.hard, self.special = checkbutton_list lcd_list, slider_list = [], [] for n, (minimum, maximum) in enumerate([(9, 21), (9, 46), (9, 27)]): offset = 40 * n slider = QSlider(self) slider.setEnabled(False) slider.setGeometry(70, 150 + offset, 248, 22) slider.setMinimum(minimum) slider.setMaximum(maximum) slider.setOrientation(QtCore.Qt.Horizontal) slider_list.append(slider) label = QLabel(self) label.setGeometry(22, 147 + offset, 47, 13) label.setText(['Высота', 'Ширина', 'Бомбы'][n]) sublabel = QLabel(self) sublabel.setGeometry(22, 157 + offset, 41, 16) sublabel.setText(f'[{minimum}-{maximum}]') lcd = QLCDNumber(self) lcd.setGeometry(327, 148 + offset, 41, 21) lcd.setDigitCount(3) lcd.setSegmentStyle(QLCDNumber.Flat) lcd.setProperty("intValue", 9) lcd_list.append(lcd) self.bombs_label = sublabel self.height_slider, self.width_slider, self.bombs_slider = slider_list self.height_lcd, self.width_lcd, self.bombs_lcd = lcd_list self.buttonGroup.buttonClicked.connect(self.checked) self.mode = (9, 9, 10) self.setWindowTitle("Сложность") self.easy.setChecked(True) self.okay_clicked = False for slider in [self.bombs_slider, self.width_slider, self.height_slider]: slider.valueChanged.connect(self.recalculate_sliders) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject)