1. 程式人生 > >Python實現角色生成器

Python實現角色生成器

選擇用Python的PyQt5來實現角色生成器

實現效果如圖

在這裡插入圖片描述 實現佈局: 主要佈局有角色預覽區、選擇種族、選擇屬性、輸入暱稱等區域,最後根據所選的種族、職業與相應比例生成屬性的能力值。 建立類MainFrame繼承QDialog,在MainFrame上新增各個元件 初始化介面的程式碼如下:

class MainFrame(QtWidgets.QDialog):
    def __init__(self):
        super(MainFrame, self).__init__()
        self.setObjectName("Object")
        self.resize(
724, 556) self.setSizeGripEnabled(False) self.setModal(False) # 新增widget self.widget = QtWidgets.QWidget(self) self.widget.setGeometry(QtCore.QRect(0, 0, 724, 556)) self.widget.setObjectName("widget") # 新增背景圖片 bg = QtGui.QPixmap(r'C:\Users\Administrator\Desktop\pyTest\homework\images\bea.jpg'
) pal = QtGui.QPalette() pal.setBrush(self.backgroundRole(), QtGui.QBrush(bg)) self.widget.setPalette(pal) self.widget.setAutoFillBackground(True) # 新增buttonBox self.buttonBox = QtWidgets.QDialogButtonBox(self) self.buttonBox.setGeometry(QtCore.
QRect(230, 500, 201, 32)) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.label = QtWidgets.QLabel(self) self.label.setGeometry(QtCore.QRect(120, 30, 101, 21)) font = QtGui.QFont() font.setFamily("Arial") font.setPointSize(14) self.label.setFont(font) self.label.setObjectName("label") # 這裡添加了一個Qlabel 用來顯示角色預覽圖片 self.RoleImg = QtWidgets.QLabel(self) self.RoleImg.setEnabled(True) self.RoleImg.setGeometry(QtCore.QRect(40, 60, 231, 291)) # 預覽區大小 self.RoleImg.setMouseTracking(False) self.RoleImg.setText("") self.RoleImg.setObjectName("RoleImg") #新增QComboBox實現角色選擇 self.Roles = QtWidgets.QComboBox(self) self.Roles.setGeometry(QtCore.QRect(420, 110, 191, 22)) self.Roles.setFrame(True) self.Roles.setObjectName("Roles") self.Roles.addItem("") self.Roles.addItem("") self.Roles.addItem("") self.label_2 = QtWidgets.QLabel(self) self.label_2.setGeometry(QtCore.QRect(320, 110, 101, 21)) font = QtGui.QFont() font.setFamily("Arial") font.setPointSize(14) self.label_2.setFont(font) self.label_2.setObjectName("label_2") # 新增QLineEdit實現使用者輸入暱稱功能 self.Nickname = QtWidgets.QLineEdit(self) self.Nickname.setGeometry(QtCore.QRect(420, 310, 181, 31)) self.Nickname.setObjectName("Nickname") self.label_3 = QtWidgets.QLabel(self) self.label_3.setGeometry(QtCore.QRect(370, 310, 51, 21)) font = QtGui.QFont() font.setFamily("Arial") font.setPointSize(12) self.label_3.setFont(font) self.label_3.setObjectName("label_3") # 選擇種族 self.Race = QtWidgets.QComboBox(self) self.Race.setGeometry(QtCore.QRect(420, 160, 191, 22)) self.Race.setFrame(True) self.Race.setObjectName("Race") self.Race.addItem("") self.Race.addItem("") self.Race.addItem("") self.Race.addItem("") self.Race.addItem("") self.label_4 = QtWidgets.QLabel(self) self.label_4.setGeometry(QtCore.QRect(320, 160, 101, 21)) font = QtGui.QFont() font.setFamily("Arial") font.setPointSize(14) self.label_4.setFont(font) self.label_4.setObjectName("label_4") # 選擇職業 self.Profession = QtWidgets.QComboBox(self) self.Profession.setGeometry(QtCore.QRect(420, 210, 191, 22)) self.Profession.setFrame(True) self.Profession.setObjectName("Profession") self.Profession.addItem("") self.Profession.addItem("") self.Profession.addItem("") self.Profession.addItem("") self.Profession.addItem("") self.Profession.addItem("") self.label_5 = QtWidgets.QLabel(self) self.label_5.setGeometry(QtCore.QRect(320, 210, 101, 21)) font = QtGui.QFont() font.setFamily("Arial") font.setPointSize(14) self.label_5.setFont(font) self.label_5.setObjectName("label_5") self.label_6 = QtWidgets.QLabel(self) self.label_6.setGeometry(QtCore.QRect(320, 260, 101, 21)) font = QtGui.QFont() font.setFamily("Arial") font.setPointSize(14) self.label_6.setFont(font) self.label_6.setObjectName("label_6") self.Sex = QtWidgets.QComboBox(self) self.Sex.setGeometry(QtCore.QRect(420, 260, 191, 22)) self.Sex.setFrame(True) self.Sex.setObjectName("Sex") self.Sex.addItem("") self.Sex.addItem("") self.tableWidget = QtWidgets.QTableWidget(self) self.tableWidget.setGeometry(QtCore.QRect(20, 380, 700, 65)) self.tableWidget.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.tableWidget.setAutoScroll(True) self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) self.tableWidget.setTabKeyNavigation(True) self.tableWidget.setShowGrid(True) self.tableWidget.setGridStyle(QtCore.Qt.SolidLine) self.tableWidget.setCornerButtonEnabled(True) self.tableWidget.setRowCount(1) self.tableWidget.setObjectName("tableWidget") self.tableWidget.setColumnCount(5) item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setFamily("華文楷體") font.setPointSize(12) font.setBold(True) font.setWeight(75) item.setFont(font) self.tableWidget.setVerticalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setFamily("華文楷體") font.setPointSize(12) font.setBold(True) font.setUnderline(False) font.setWeight(75) item.setFont(font) item.setBackground(QtGui.QColor(85, 85, 127)) self.tableWidget.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setFamily("華文楷體") font.setPointSize(12) font.setBold(True) font.setWeight(75) item.setFont(font) self.tableWidget.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setFamily("華文楷體") font.setPointSize(12) font.setBold(True) font.setWeight(75) item.setFont(font) self.tableWidget.setHorizontalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setFamily("華文楷體") font.setPointSize(12) font.setBold(True) font.setWeight(75) item.setFont(font) self.tableWidget.setHorizontalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setFamily("華文楷體") font.setPointSize(12) font.setBold(True) font.setWeight(75) item.setFont(font) self.tableWidget.setHorizontalHeaderItem(4, item) item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setFamily("華文楷體") font.setPointSize(12) font.setBold(True) font.setWeight(75) item.setFont(font) self.tableWidget.setHorizontalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setFamily("華文楷體") font.setPointSize(12) font.setBold(True) font.setWeight(75) item.setFont(font) self.tableWidget.setHorizontalHeaderItem(6, item) self.tableWidget.horizontalHeader().setCascadingSectionResizes(True) self.tableWidget.horizontalHeader().setDefaultSectionSize(89) self.tableWidget.horizontalHeader().setMinimumSectionSize(19) self.tableWidget.horizontalHeader().setSortIndicatorShown(True) self.tableWidget.horizontalHeader().setStretchLastSection(True) # self.tableWidget.verticalHeader().setCascadingSectionResizes(True) self.tableWidget.verticalHeader().setDefaultSectionSize(30) # self.tableWidget.verticalHeader().setMinimumSectionSize(16) # self.tableWidget.verticalHeader().setSortIndicatorShown(True) # self.tableWidget.verticalHeader().setStretchLastSection(True) self.retranslateUi(self) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) QtCore.QMetaObject.connectSlotsByName(self) self.bind_event() def retranslateUi(self, Object): _translate = QtCore.QCoreApplication.translate Object.setWindowTitle(_translate("Object", "初始化角色")) self.label.setText(_translate("Object", "角色預覽")) # 初始有3個角色 self.Roles.setItemText(0, _translate("Object", "大蛇丸")) self.Roles.setItemText(1, _translate("Object", "角色1")) self.Roles.setItemText(2, _translate("Object", "角色2")) self.label_2.setText(_translate("Object", "選擇角色")) self.label_3.setText(_translate("Object", "暱稱")) # 添加個種族 self.Race.setItemText(0, _translate("Object", "人類")) self.Race.setItemText(1, _translate("Object", "精靈")) self.Race.setItemText(2, _translate("Object", "獸人")) self.Race.setItemText(3, _translate("Object", "矮人")) self.Race.setItemText(4, _translate("Object", "元素")) # 新增六種職業選項 self.Profession.setItemText(0, _translate("Object", "狂戰士")) self.Profession.setItemText(1, _translate("Object", "聖騎士")) self.Profession.setItemText(2, _translate("Object", "刺客")) self.Profession.setItemText(3, _translate("Object", "獵手")) self.Profession.setItemText(4, _translate("Object", "祭司")) self.Profession.setItemText(5, _translate("Object", "巫師")) self.label_4.setText(_translate("Object", "選擇種族")) self.label_5.setText(_translate("Object", "選擇職業")) self.label_6.setText(_translate("Object", "選擇性別")) self.Sex.setItemText(0, _translate("Object", "男")) self.Sex.setItemText(1, _translate("Object", "女")) item = self.tableWidget.verticalHeaderItem(0) item.setText(_translate("Object", "能力值")) item = self.tableWidget.horizontalHeaderItem(0) item.setText(_translate("Object", "力量")) item = self.tableWidget.horizontalHeaderItem(1) item.setText(_translate("Object", "敏捷")) item = self.tableWidget.horizontalHeaderItem(2) item.setText(_translate("Object", "體力")) item = self.tableWidget.horizontalHeaderItem(3) item.setText(_translate("Object", "智力")) item = self.tableWidget.horizontalHeaderItem(4) item.setText(_translate("Object", "智慧")) item = self.tableWidget.horizontalHeaderItem(5) item.setText(_translate("Object", "生命")) item =