使用QT创建PythonGUI程序
1. 挑選 GUI設(shè)計(jì)程序: wxPython Vs. pyQt4???
參考鏈接:http://www.douban.com/group/topic/14590751/
(1):wxWidgets wxPython :開(kāi)發(fā)商業(yè)軟件完全沒(méi)有問(wèn)題,使用LGPL協(xié)議;前提是你不能對(duì)這個(gè)庫(kù)的本身有什么改動(dòng),如果有改動(dòng)的話,你要開(kāi)放你改動(dòng)的那部分代碼。
如果你只是使用這些庫(kù)的話,沒(méi)什么問(wèn)題,不要對(duì)庫(kù)本身的代碼進(jìn)行改動(dòng)。
???????? Q: 最近看一個(gè)wxpython的項(xiàng)目代碼,想找個(gè)文檔,難死了,基本沒(méi)有,函數(shù)用法基本沒(méi)有,類的用法說(shuō)明沒(méi)有; A: 文檔應(yīng)該寫在源代碼里了吧?就像tornado,或者像emacs的插件一樣。
???????? 拋開(kāi)wx自身不談,wxpython移植的非常爛,文檔一坨屎,就是robin自己沒(méi)事維護(hù)一下,搞不好哪天就玩完。PyQt還算個(gè)產(chǎn)品的樣子。買了本wxPython in Action ,剛看完?,F(xiàn)在可以寫一些小工具了。
? ? ? ?? A:Like Python and wxWidgets,? wxPython is Open Source which means that it is free for anyone to use and? the source code is available for anyone to look at and modify. ?? ??????????
(2):pyQt4:pyQt4運(yùn)行速度更快,寫同樣的程序代碼量應(yīng)該比wxpython少的多,pyQt現(xiàn)在也有LGPL版了,諾基亞的pyside,就是不知道穩(wěn)定性怎么樣,打包比wxpython大一點(diǎn),一個(gè)helloworld小窗口,wxpython用py2exe打包壓縮后2M多一點(diǎn),pyQt打包壓縮后8M左右。
?????????? OxFAN 是可以鏈接,但只能動(dòng)態(tài)鏈接,而且發(fā)行時(shí)不能綁定LGPL軟件的二進(jìn)制文件,比如安裝包中不能含有QT的二進(jìn)制文件(如果使用LGPL協(xié)議的話);
?????????? 推薦使用NOKIA QT 的官方 LGPL 協(xié)議版本——PySide;
2. PyQt4:Qt庫(kù)的Python綁定PyQt
?Q : 為什么使用PyQt4: A:? 權(quán)衡
PyQt向Python程序員提供了使用完整Qt應(yīng)用程序接口的方法。您幾乎可以用Python做任何C++能做的事。
既然是應(yīng)用程序接口,用C++或是Python都是一樣的。于是“為什么我得使用它”這個(gè)問(wèn)題就可以歸結(jié)為編程語(yǔ)言的選擇上,而不一定要用PyQt。對(duì)我來(lái) 說(shuō)作為一種編程語(yǔ)言,python相對(duì)于c++的優(yōu)點(diǎn)是在編程效率上。您可以看到標(biāo)準(zhǔn)的Qt例子移植到PyQt后的代碼。它們具有相同的功能,使用相同的 應(yīng)用程序接口,但Python版的代碼只有原來(lái)的50-60%,而且它們更容易閱讀。
與編程效率相關(guān)的是Python更容易學(xué)習(xí),而且它足以滿足富有經(jīng)驗(yàn)的程序員。奇趣公司已經(jīng)發(fā)現(xiàn)PyQt可以使他們向應(yīng)用高端技術(shù)的團(tuán)體出售Qt,這些團(tuán)體的成員是工業(yè)專家(化學(xué)家,航空工程師等)而不是精深的C++程序員。
當(dāng)然PyQt既成熟又穩(wěn)定,并且有龐大的用戶群體。我從用戶那兒得到的兩個(gè)最普通的反饋是“它恰到好處"和“它很不錯(cuò)?!?/span>
3.使用QT設(shè)計(jì)UI:
用qt設(shè)計(jì)師設(shè)計(jì)ui文件:
4. 使用QT設(shè)計(jì)UI,編譯生成Python工程:
參考鏈接:http://www.cnblogs.com/fickleness/p/3145967.html
編譯已經(jīng)生成的用qt設(shè)計(jì)師保存的UI文件,使用命令pyuic4
C:\Users\Administrator>cd C:\Python27\Lib\site-packages\PyQt4 C:\Python27\Lib\site-packages\PyQt4>pyuic4 C:\Python27\Lib\site-packages\PyQt4\d emo.ui -o C:\Python27\Lib\site-packages\PyQt4\demo.py?(在DOS環(huán)境下編譯 : ( 小插曲,進(jìn)dos找不到? python命令,? 想起來(lái)上次配置環(huán)境變量是?? 保存在administrater的變量中了,只能在本次生效,要想一直生效就得保存路徑名
) 編譯生成demo.ui--------------- demo.py文件
在工程中import? filesystem,要不程序怎么知道要使用demo.py!
導(dǎo)入成功。
使用模塊代碼顯示:
import sys from PyQt4 import QtGui,QtCore from demo import *if __name__ == "__main__":app =QtGui.QApplication(sys.argv)mywidget = Ui_MainWindow() #you need use the class name in PyQtSampleinsteadform = QtGui.QMainWindow()mywidget.setupUi(form)form.show() app.exec_()以測(cè)試方式運(yùn)行:參考鏈接:http://blog.csdn.net/lainegates/article/details/8774410 class UItest(QtGui.QMainWindow): def __init__(self,parent=None): QtGui.QWidget.__init__(self,parent) self.loginGui() def loginGui(self): self.ui = Ui_Dialog() self.ui.setupUi(self) self.show() app = QtGui.QApplication(sys.argv) myqq = UItest() sys.exit(app.exec_()) (注:pyuic參數(shù)說(shuō)明:NAME pyuic4 - compile Qt4 user interfaces to Python code SYNOPSIS pyuic4 [OPTION]... FILE DESCRIPTION pyuic4 takes a Qt4 user interface description file and compiles it to Python code. It can also show a preview of the user interface. OPTIONS -h, --help Show a summary of the options. --version Display the version number of pyuic4 of the version of Qt which PyQt4 was generated for. -p, --preview Show a preview of the UI instead of generating Python code. -o, --output=FILE Write the generated Python code to FILE instead of stdout. -d, --debug Show detailed debugging information about the UI generation process. -x, --execute Generate extra code to test and display the class when executed as a script. -i, --indent=NUM Set the indentation width to NUM spaces. A TAB character will be used if NUM is 0 (default: 4). )
run 工程即可實(shí)現(xiàn),不過(guò)邏輯設(shè)計(jì)還沒(méi)有完成,期待原作者繼續(xù)!
4.? 使用py2exe生成win軟件:
參考文章:http://www.cnblogs.com/jans2002/archive/2006/09/30/519393.html
py2exe是一種python發(fā)布工具,可以把python腳本轉(zhuǎn)換成windows下的可執(zhí)行程序,不需要安裝python便可運(yùn)行。
py2exe現(xiàn)在可以用來(lái)創(chuàng)建使用了wxPython, Tkinter, Pmw, PyGTK, pygame, win32com client and server 等模塊的程序。
詳細(xì)介紹可以看它的官方網(wǎng)站 http://starship.python.net/crew/theller/py2exe/
一、簡(jiǎn)介
py2exe是一個(gè)將python腳本轉(zhuǎn)換成windows上的可獨(dú)立執(zhí)行的可執(zhí)行程序(*.exe)的工具,這樣,你就可以不用裝python而在windows系統(tǒng)上運(yùn)行這個(gè)可執(zhí)行程序。
py2exe已經(jīng)被用于創(chuàng)建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com?client和server,和其它的獨(dú)立程序。py2exe是發(fā)布在開(kāi)源許可證下的。
二:我的過(guò)程:
set PATH=%PATH%;C:\Python27 //set path! cd d/ D:\ cd D:\Develope\EclipseWorks\PythonGUI在CMD欄里,運(yùn)行命令 python? setup.py py2exe?
可在目錄下生成 dist/xxx.exe 可以運(yùn)行
注:對(duì)于使用pyQT4 產(chǎn)生:
Traceback (most recent call last):File "_init_.py", line 2, in <module>File "PyQt4\QtGui.pyc", line 12, in <module>File "PyQt4\QtGui.pyc", line 10, in __load ImportError: No module named sip解決方案參考:http://www.py2exe.org/index.cgi/Py2exeAndPyQt
setup.py里面添加:
windows = [{"script":"_init_.py"} ], options={"py2exe":{"includes":["sip"]}} 即可三、py2exe的用法
如果你有一個(gè)名為helloworld.py的python腳本,你想把它轉(zhuǎn)換為運(yùn)行在windows上的可執(zhí)行程序,并運(yùn)行在沒(méi)有安裝python的windows系統(tǒng)上,那么首先你應(yīng)寫一個(gè)用于發(fā)布程序的設(shè)置腳本例如mysetup.py,在其中的setup函數(shù)前插入語(yǔ)句import?py2exe?。
mysetup.py示例如下:
setup(console=["helloworld.py"])
然后按下面的方法運(yùn)行mysetup.py:? python?mysetup.py?py2exe(運(yùn)行時(shí)傳入?yún)?shù))
上面的命令執(zhí)行后將產(chǎn)生一個(gè)名為dist的子目錄,其中包含了helloworld.exe,python24.dll,library.zip這些文件。如果你的helloworld.py腳本中用了已編譯的C擴(kuò)展模塊,那么這些模塊也會(huì)被拷貝在個(gè)子目錄中,同樣,所有的dll文件在運(yùn)行時(shí)都是需要的,除了系統(tǒng)的dll文件。
dist子目錄中的文件包含了你的程序所必須的東西,你應(yīng)將這個(gè)子目錄中的所有內(nèi)容一起發(fā)布。
默認(rèn)情況下,py2exe在目錄dist下創(chuàng)建以下這些必須的文件:
1、一個(gè)或多個(gè)exe文件。
2、python##.dll。?
3、幾個(gè).pyd文件,它們是已編譯的擴(kuò)展名,它們是exe文件所需要的;加上其它的.dll文件,這些.dll是.pyd所需要的。
4、一個(gè)library.zip文件,它包含了已編譯的純的python模塊如.pyc或.pyo
上面的mysetup.py創(chuàng)建了一個(gè)控制臺(tái)的helloword.exe程序,如果你要?jiǎng)?chuàng)建一個(gè)圖形用戶界的程序,那么你只需要將mysetup.py中的console=["helloworld.py"]替換為windows=["myscript.py"]既可。
py2exe一次能夠創(chuàng)建多個(gè)exe文件,你需要將這些腳本文件的列表傳遞給console或windows的關(guān)鍵字參數(shù)。如果你有幾個(gè)相關(guān)聯(lián)的腳本,那么這是很有用的。
運(yùn)行下面?zhèn)€命令,將顯示py2exe命令的所有命令行標(biāo)記。
python?mysetup.py?py2exe?--help
四、指定額外的文件
一些應(yīng)用程序在運(yùn)行時(shí)需要額外的文件,諸如配置文件、字體、位圖。
如果在安裝腳本中用data_files可選項(xiàng)指定了那些額外的文件,那么py2exe能將這些文件拷貝到dist子目錄中。data_files應(yīng)包含一個(gè)元組(target-dir,?files)列表,其中的files是這些額外的文件的列表。
示例如下:
五、Windows?NT?services
你可以通過(guò)傳遞一個(gè)service關(guān)鍵字參數(shù)給setup函數(shù)來(lái)建造Windows?NT?services
,這個(gè)service參數(shù)的值必須是一個(gè)Python模塊名(包含一service類)的列表。
示例如下:
# mysetup.py from distutils.core import setup import py2exe setup(service=["MyService"])所建造的可執(zhí)行的service是可以通過(guò)在其后跟一定的命令行參數(shù)標(biāo)記來(lái)自行安裝和卸載的。你可以通過(guò)在這個(gè)可執(zhí)行的service(exe)后跟一-help參數(shù)來(lái)得到更多的幫助。
六、COM?servers
你可以通過(guò)傳遞一個(gè)com_server?關(guān)鍵字參數(shù)給setup函數(shù)來(lái)建造Windows?NT?services
,這個(gè)service參數(shù)的值必須是一個(gè)Python模塊名(包含一個(gè)或多個(gè)COM?server?類)的列表。
示例如下:
總結(jié)
以上是生活随笔為你收集整理的使用QT创建PythonGUI程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 长沙装饰报价长沙大众装饰公司推荐
- 下一篇: websocket python爬虫_p