標籤:io 使用 for 檔案 資料 cti sp 代碼 html
分析多個檔案組成的原始碼,最好使用協助工具輔助。
我試過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)