首页 > 代码库 > PyQt挖地雷游戏学习笔记(2)
PyQt挖地雷游戏学习笔记(2)
分析多个文件组成的源代码,最好使用辅助工具。
我试过Source Navigator 和 Source Insight,感觉后者功能多些,比较好用。
一、程序的组成模块等文件
这个挖地雷游戏,主要由2种文件组成:
1、程序模块
主程序main.py:负责主窗口物件,按钮和菜单的设置、事件处理、程序初始化、结束等等。
游戏逻辑模块game_scene.py:负责游戏规则、棋盘显示、胜负裁判、记录得分等等。
“导入”文件lib.py:导入一些通用的模块,其他文件只需导入lib.py。
游戏设置模块setup.py:由菜单打开的对话框,设置棋盘大小和地雷数目。
游戏记分模块score.py:玩家挖出全部地雷获胜后,弹出对话框,游戏记分。
默认设置模块config.py:棋盘大小、地雷多少,由其存为默认设置。
2、GUI界面蓝图
主窗口:mainwindow.ui
记分对话框:score.ui
设置对话框:setup.ui
另外,还有一个默认设置数据文件config.cfg。
二、程序的GUI初始化
这个挖地雷程序,没有把界面蓝图ui文件用pyuic4转换成py文件,而是直接使用ui文件。
在GUI初始设置上,有其明显特点,与老式PyQt程序不同。这具体表现在以下几个方面:
1、首先装载GUI蓝图
在模块中class体外,使用函数 loadUiType(ui_file),先把GUI界面蓝图载入内存,
以实现相关具体物件和机制;
各模块在实例化、初始化各个class之前,首先做这件事情。如:
main.py模块中的 form, base = loadUiType("mainwindow.ui")
setup.py模块中的 form, base = loadUiType("setup.ui")
score.py模块中的 form, base = loadUiType("score.ui")
2、处理“事件”的方式有所简化
例如,mainwindow.ui中,有以下菜单项:
<addaction name="actionAbout_Qt"/> <addaction name="action_New"/> <addaction name="action_Pause"/> <addaction name="action_Full_Screen"/> <addaction name="action_Score"/> <addaction name="action_Setup"/>
把上述name加上头、尾:on_ 和 _triggered,作为函数名,
并以@pyqtSlot()修饰,在main.py中形成处理“信号”的“槽”:
@pyqtSlot() def on_actionAbout_Qt_triggered(self): @pyqtSlot() def on_action_New_triggered(self): @pyqtSlot() def on_action_Pause_triggered(self): @pyqtSlot() def on_action_Full_Screen_triggered(self): @pyqtSlot() def on_action_Score_triggered(self): @pyqtSlot() def on_action_Setup_triggered(self):
Qt的“信号-槽”机制,没有什么“逐级上传”等花头,简明实用。
另外,“信号-槽”的关联函数connect,只用1个参数,即“槽名”,
与Qt要用4个参数相比,简化许多。如main.py的class Face中:
scene.changeStatus.connect(self.changeStatus) self.button.clicked.connect(self.me)
并且,一个信号,可与多个槽关联。如:
在game_scene.py中定义的信号
changeStatus = pyqtSignal(int)
分别与main.py中2个槽changeStatus关联。一是在上述class Face里,
二是在class MainWindow里。
PyQt挖地雷游戏学习笔记(2)