软工第二次课设-图形界面开发
本次的主要工作是在第一次黄金点游戏的基础上开发图形界面
开发平台Pycharm
开发工具PyQt5
一、图形界面设计
根据第一次开发的游戏功能,本次图形界面的开发包括初始界面,初始界面又包括:
1、开始新游戏
2、继续游戏
3、查看既往结果
4.退出游戏
这四个功能按钮
本次图形界面开发还包括一个游戏进行界面,包括:
1、输入游戏玩家人数(QtWeidgetText框)
2、输入玩家名称及所给的数字(QtWeidgetTable表格)
3、游戏输出结果(QtWeidgetText框)
二、图形界面实现
初始界面mainUI
初始界面的代码主要就是包括实现开始Window界面、实现Button按钮
def setupUi(self, MainWindow): # 启动开始界面
MainWindow.setObjectName("MainWindow")
MainWindow.resize(382, 358)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(150, 20, 114, 83))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(28)
self.label.setFont(font)
self.label.setObjectName("label")
##考虑到篇幅,代码未完全列出
def retranslateUi(self, MainWindow): #实现按钮的显示
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "黄金点"))
self.pushButton.setText(_translate("MainWindow", "开始新游戏"))
self.pushButton_2.setText(_translate("MainWindow", "继续游戏"))
self.pushButton_3.setText(_translate("MainWindow", "查看既往结果"))
self.pushButton_4.setText(_translate("MainWindow", "退出"))
游戏界面gameUI
gameUI界面主要就是实现游戏界面的设计
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "玩家人数:"))
self.lineEdit.setText(_translate("MainWindow", "2"))
self.pushButton_2.setText(_translate("MainWindow", "确定"))
self.groupBox_2.setTitle(_translate("MainWindow", "输入"))
item = self.tableWidget.verticalHeaderItem(0)
item.setText(_translate("MainWindow", "0"))
item = self.tableWidget.verticalHeaderItem(1)
item.setText(_translate("MainWindow", "1"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "玩家姓名"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "玩家数据"))
self.pushButton.setText(_translate("MainWindow", "开始"))
self.groupBox.setTitle(_translate("MainWindow", "结果"))
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(547, 466)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.label = QtWidgets.QLabel(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(12)
self.label.setFont(font)
self.label.setObjectName("label")
self.horizontalLayout_3.addWidget(self.label)
# 代码未完全列出
goldenPoint.py
在goldenPoint.py里新增了两个class:
MainUI(QMainWindow)
class MainUI(QMainWindow):
def __init__(self): #初始化函数
def newgame(self): # 开始新游戏
def continuegame(self): # 继续游戏
def seeHistory(self): # 查看既往结果
GameUI(QMainWindow)
class GameUI(QMainWindow):
def __init__(self): # 初始化函数
def showGamer(self) # 展示玩家
def startGame(self): # 获取玩家输入数据 并开始游戏
# to do
GoldenPoint(people, num)# 调用class People里的函数 people是游戏人数 num是含有所有玩家输入数字的一个列表
# ...未列出
def closeEvent(self, *args, **kwargs): # 关闭
三、最终效果:
启动项目,产生开始界面
游戏结果展示
四、总结
在本次团队开发中,我们小组二人发现,第一次的开发很多东西没有考虑到,比如说类的抽象不够,没有预留相应的接口,导致在第二次的开发过程中,没有办法在设计好界面以后,直接将界面按钮功能绑定在游戏功能的接口中,这让我们的工作量增大了许多。因此,在接下来的开发中,我们要更加重视对整体代码的设计,使我们的代码在后续迭代开发中有更理想的扩展性。
另外,由于我们小组对PyQt的使用还不算非常熟练,导致在设计界面的时候代码有些冗杂。在以后的界面开发中,可以直接采用QtDesigner,可以大量简化界面设计的代码。