Base PyQt4, Simple Web APP Framwork
長時間以來,一直針對Linux 服務器開發后臺程序,每天面對的是黑框框,輸出只有日志文件。偶爾需要模擬客戶端測試,要么是寫幾行php代碼,在瀏覽器上點一點,要么是寫個小Python腳本在shell中執行一下。寫了一些測試用的小腳本以后,越來越鐘愛這種腳本測試方式了。想到什么測試case,三下五除二改改腳本就能測了。測試小腳本多多少少也寫了十來個了。其實自己Php和Python的底子都不好,只是略懂一二,居然大部分問題都能google一下輕松解決,主要是也不需要使用神馬高級特性哈哈。
? ? ? 最近的項目的測試卻讓我犯難了,要搞GUI程序!哥身為Linux服務器下C++程序員,向來不屑寫GUI,也閑麻煩(也閑自己不太會哈哈)。我們開發了一個基于地圖的游戲,現在一是要測試穩定性模擬N個用戶隨機的移動,二是測試服務器性能,當用戶相對集中在地圖上某個區域時,服務器的響應效率如何。這個是當前最主要的需求,我們需要搞一個GUI程序顯示地圖上所有人的移動。設計的方案是將整個地圖縮小到只有一屏,把用戶顯示為一個紅點,可以動態的增加用戶,還可以實時顯示服務器當前各個區域的負載圖。除了這個需求外,以前也碰到過一些需要GUI工具的需求,如檢查任務定義的excel,檢查地圖配置的xml的有效性等。這些目前都是通過Web或Flash幫忙做了,但其實這些工具最好是后臺程序員維護,畢竟一些限制、檢查后臺開發是最清楚的。
? ? ?于是乎N年來第一次這么想寫GUI程序,哥不搞則以,一搞驚人哈哈!即整就整一個通用點的吧!!整理需求如下:
- 常用的工具程序一般要經常修改,So GUI工具程序一定要用腳本寫
- 使用工具的人大致為開發、策劃、運維,知道她們都用神馬系統嗎?普通青年用window,文藝青年用Mac,二逼青年用Linux,So Gui工具還要跨平臺
- 世界上最容易編寫的GUI是神馬?我的答案是HTML,大學里盡JB寫web了,要是能讓哥能用HTML+JQuery,那效率絕對是杠桿的。但是如果直接寫Php頁面有一些缺陷,一是他不能長期運行,點一下運行一下,二是普通Html+Jquery是不能訪問本地文件系統的,更不能自己發起socket連接到服務器。
? ? 經過一二兩條,剩下的就是Lua和python了,但是Lua庫太少,果斷排除。加上第三條,經過艱苦的google加demo測試剩下python +widget、 和 python + Qt。剛開始苦逼的選擇了wxpython,普通HTML頁面鼓搗幾個小時就搞出來了,這時才悲劇的發現塔不支持CSS 和 Javascript,連表單都不支持,我自己給其擴展了一下好不容易支持按鈕了,但是不支持javascript太讓我不甘心了。So 果斷丟棄代碼。
? ? 最后PyQt成為我最后的選擇,稍微看了一下Qt庫,就不禁感嘆,這庫太JB牛逼了,外國佬揍是牛逼,這么牛逼的庫開源出來。Qt中包含了N多方面的封裝,其中Webkit就是專門用來渲染HTML的,Chrome、Safari等都是基于webkit引擎渲染,怪不人家能有這么帥的瀏覽器,人家基礎庫搞的好,長期技術積累啊。咋沒見國人搞神馬渲染引擎。這真是造福人類的好東東。我一直認為最牛逼的軟件就是QT、Webkit這樣的,開發此軟件的人牛逼,連使用這些軟件的人都覺的能夠使用這樣牛逼的軟件,覺得自己也牛逼。除qt,webkit外,還有mysql、Linux、memcache、gcc 。我見過N過精通Oracle的人牛逼哄哄的樣子,Oracle的作者我沒見過,應該是更牛逼哄哄吧。
? ? 下面詳述一下我的實現:主要基于window平臺(注:目前是個普通青年)
1. 安裝python
window 下載安裝包,一路下一步即可,下載地址python.org,推薦下載python2.7 32位版本,推薦連接
python-2.7.1.zip
linux:yum/apt 一鍵安裝
2. 安裝pyqt4
win下下載相應的安裝包,注意和python版本對應,推薦下載
| PyQt-Py2.7-x86-gpl-4.9-1.exe | Windows 32 bit installer |
http://www.riverbankcomputing.co.uk/software/pyqt/download
linux yum/apt 或者下載tar包自己安裝,二逼青年總是會麻煩一點。
3. 下載偶的示例代碼:
svn co?https://ffown.googlecode.com/svn/trunk/python
4. 運行
雙擊main.py即可運行,運行效果圖如下,主要包括通過google下載圖片的例子、jquery控制按鈕例子,javascript通過python訪問文件系統例子,url重定向例子,還有一個html5動畫的例子。
?
?
5. 框架詳解:
要用pyqt實現一個瀏覽器,最少只需如下幾行代碼:參見pylib/simple.py
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("http://www.cnblogs.com/zhiranok"))
web.show()
sys.exit(app.exec_())
我自己將PyQtWebkit封裝到pylib下的ffqt.py
和上面不同的是1我封裝了幾個函數供Javascript調用。2我默認調用html目錄下的index.html文本即可,若要修改GUI只需修改index.html文件即可。
class PythonJS(QObject):url = []__pyqtSignals__ = ("contentChanged(const QString &)")@pyqtSignature("", result="QString")def get_image_url(self):if len(self.url) == 0:search_url = 'http://ffown.sinaapp.com/get_image_url.php'search_ret = eval(urllib.urlopen(search_url).read())self.url = search_retdest = self.url[random.randint(0, 100) % len(self.url)]return dest@pyqtSignature("QString", result="QString")def readfile(self, path):ret = ""try:f = open(path, "r")ret = f.read()f.close()except:ret = "file not exist!" + pathtraceback.print_exc()return ret@pyqtSignature("QString", result="QString")def select_file(self, ext = "*"):ret = QFileDialog.getOpenFileName(None, "", ext, "FileDialog")return re這里PythonJS就是為javascript封裝的擴展函數庫,每個成員方法javascript都可以直接調用,如讀取文件內容的readfile在javascript中調用方式為
python.readfile(file_path)
? ? ?這樣javascript不方便做的如訪問文件系統、socket連接、數據庫訪問等,都可以交個python來做。利用HTML加Jquery很容易寫出一個很實用的GUI程序。
? ? ?please Try it,歡迎文藝青年、二逼青年、普通青年測試、報bug。
?
?
?
?
總結
以上是生活随笔為你收集整理的Base PyQt4, Simple Web APP Framwork的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu下mysql-python模
- 下一篇: 各种学习资料收录