畢設(shè)題目是有限狀態(tài)機在游戲AI中的應(yīng)用,其實整個狀態(tài)機模型并不復(fù)雜,核心代碼也就python 100行左右的量,做了個螞蟻和蜘蛛的場景,整個小游戲也就500行代碼,考慮到太簡單了,所以后面又給自己加了個任務(wù):用圖形界面編輯狀態(tài)。因為之前沒接觸過GUI,最多就是用過公司的UI編輯器,對于GUI的實現(xiàn)并不了解,所以感覺還是挺有挑戰(zhàn)的,因為代碼是用python寫的,所以選擇pyqt為學(xué)習(xí)的對象。
介紹
pyQT是python語言的GUI的解決方案之一
PyQt包含了大約440個類型、超過6000個的函數(shù)和方法。
“QtCore”模塊主要包含了一些非GUI的基礎(chǔ)功能,包含事件循環(huán)與Qt的信號機制。此外,還提供了跨平臺的Unicode、線程、內(nèi)存映射文件、共享內(nèi)存、正則表達式和用戶設(shè)置。
“QtGui”模塊包含了大多數(shù)的GUI類型。包含按鈕、文本框、列表等常見控件,還包含了基于MVC設(shè)計模式的列表、表格、樹型控件。同時還提供了一個能夠容納成千上萬個元素的畫布控件,其中可以放置各種控件和圖形。此外,還可以QtGui還支持界面動畫與界面狀態(tài)機編程。
“QtNetwork”模塊可以用于編寫非阻塞式的UDP、TCP程序。還包含了DNS、HTTP與FTP的客戶端。
“QtOpenGL”模塊允許Qt程序使用OpenGL渲染3D圖形在,而且不必大量更改代碼。
“QtSql”模塊支持多種SQL數(shù)據(jù)庫。包括sqlite、ODBC、MySQL、PostgreSQL、Oracle。還提供了一個基于MVC模式的數(shù)據(jù)模型,與QtGui的的表格控件配合使用。
“QtXml”包含一個XML解釋器,同時支持SAX和DOM兩種編程方式。
“QtWebkit”與“QtScript”兩個子模塊支持WebKit與EMCAScript腳本語言
“Phonon”子模塊支持高級的多媒體編程。包含音頻播放器、視頻播放器與聲效處理。
“uic”子模塊能夠?qū)t的窗體文件轉(zhuǎn)換為Python代碼,能夠即時讀入窗體文件并且顯示出來。它依賴于QtXml模塊?!癚Scintilla”子模塊包含一個基于Scintilla的文本編輯器控件,Eric IDE使用它作為代碼編輯器?!癚tMultimedia”提供了底層的多媒體支持,現(xiàn)在多數(shù)開發(fā)者改用Phonon模塊?!癚tSvg”支持SVG 1.2 Tiny的靜態(tài)標準,用于顯示與保存SVG格式的圖形。
by https://zh.wikipedia.org/wiki/PyQt
首先安裝pyQT,https://riverbankcomputing.com/software/pyqt/download,我選擇的python2.7的版本
還好有binary的版本,我是在pc上安裝的,以前記得下python的數(shù)據(jù)庫相關(guān)庫折騰了好久。安裝后,直接開始!

可見Pyqt的使用還是很簡單的,首先創(chuàng)建一個applicaion的實例,然后創(chuàng)建組件,讓組件show,最后application進入循環(huán)。想來application里面應(yīng)該會做窗口初始化等相關(guān)操作,本來想看看源碼,結(jié)果發(fā)現(xiàn)似乎并不開源~~~~
然后不可能這樣手寫界面的,qt designer實現(xiàn)拖拽完成界面的方式。我下載的qt-opensource-windows-x86-msvc2010-5.5.1這個版本,700多M。

界面很友好,左邊的組件也很多,保存后輸出一個UI文件,用記事本打開,其為xml格式:

還是很清晰的,把其解析為python文件要用到uic這個庫,如下:

效果如下:

看了下代碼化的輸出,如下,可以發(fā)現(xiàn)還是很清晰的,至少比我司的代碼化清晰多了,setupUi是創(chuàng)建設(shè)置各種組件,retranslate設(shè)置值

其實一直想學(xué)習(xí)解析這一塊,也就是代碼化,奈何每次這種地方都給出“難看”,代碼一大堆,注釋又很少,取名也很怪異。。。。。
麻蛋,突然不知道怎么下手,比如我想實現(xiàn)拖拽功能,designer只能編輯個列表框,然后觸摸點擊這些還是得深入了解這個庫才行,那樣的話還不如直接做在游戲里。在網(wǎng)上找了找答案,知乎輪子哥建議直接做在游戲里,我也慫了,因為自己本來目的就是想學(xué)學(xué)代碼化,所以還是妥協(xié)了吧~~~~~