Python實現角色生成器
阿新 • • 發佈:2018-12-12
選擇用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 =