ubuntu中配置pyqt4環(huán)境教程
相機(jī)校準(zhǔn)前需要設(shè)置wifi的mac地址和切換校準(zhǔn)模式,之前寫的命令行工具,去了工廠發(fā)現(xiàn)使用可能有障礙,就做了個小應(yīng)用程序,用了兩種方法,先看一下第一種(不想選擇的)
使用Tkinter做圖形界面
Tkinter寫界面麻煩,文檔資料也不是很多,這里只做代碼展示
#!/usr/bin/python # -*- coding: UTF-8 -*- from Tkinter import * # 導(dǎo)入 Tkinter 庫 from tkMessageBox import * import httplib import re class MainWindow: def __init__(self): root = Tk() root.title("工具") width = 500 height = 300 screenwidth = root.winfo_screenheight() screenheight = root.winfo_screenheight() size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2) root.geometry(size) root.minsize(width, height) root.maxsize(width, height) Label(root, height=4, width=14, text="掃描數(shù)據(jù):").grid(row=0, column=0, sticky=W) self.name = StringVar() Entry(root, width=30, textvariable=self.name).grid(row=0, column=1, columnspan=2) b1 = Button(root, text="發(fā)送MAC數(shù)據(jù)", height=4, width=10, command=self.send) b1.grid(row=2, column=0, sticky=E) b2 = Button(root, text="切換校準(zhǔn)模式", height=4, width=10, command=self.close) b2.grid(row=2, column=1, sticky=E) b3 = Button(root, text="清空", height=4, width=10, command=self.clear) b3.grid(row=2, column=2, sticky=E) root.mainloop() def send(self): if self.name.get() == '': showwarning("輸入為空", "參數(shù)不能為空,請重新操作!") else: result = re.sub(r"(?<=\w)(?=(?:\w\w)+$)", " ", self.name.get()) self.httpSend(result) def close(self): self.httpDisconnect() def clear(self): self.name.set('') # 創(chuàng)建HTTP連接 def httpSend(self, mac): httpClient = None # 進(jìn)行操作 # 創(chuàng)建HTTP連接 def httpDisconnect(self): httpClient = None # 進(jìn)行操作 if __name__ == '__main__': MainWindow()
使用PyQt4做圖形界面
大學(xué)時候自學(xué)過一點Qt4.8.4的東西,所以比較傾向于用pyqt開發(fā),跨平臺,而且資料也比較齊全,特別是Qt脫離諾基亞后這幾年發(fā)展迅猛,很多公司都開始采用Qt來開發(fā)圖形界面應(yīng)用了
首先配置環(huán)境
sudo apt-get install python-pip python2.7-dev libqt4-dev libqt4-dbg libqt4-gui libqt4-sql qt4-dev-tools qt4-doc qt4-designer qt4-qtconfig pyqt4-dev-tools
然后看代碼
#!/usr/bin/python # -*- coding: utf-8 -*- import sys import httplib import re from PyQt4.QtCore import * from PyQt4.QtGui import * #這里為了偷懶,用到啥導(dǎo)入啥 class MainWindow(QWidget): def __init__(self,parent=None): QWidget.__init__(self,parent) self.setWindowTitle(u'工具') mac = QLabel(u'掃描數(shù)據(jù):') self.macEdit = QLineEdit() grid = QGridLayout() grid.addWidget(mac,1,0) grid.addWidget(self.macEdit,1,1) clear = QPushButton(u'清空') send = QPushButton(u'發(fā)送') disconnect = QPushButton(u'斷開') grid.addWidget(clear,2,1) grid.addWidget(send,3,1) grid.addWidget(disconnect,4,1) self.setLayout(grid) self.resize(550,200) screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2) self.connect(clear, SIGNAL('clicked()'), self.clearAction) self.connect(send, SIGNAL('clicked()'), self.sendAction) self.connect(disconnect, SIGNAL('clicked()'), self.httpDisconnect) def clearAction(self): self.macEdit.clear() def sendAction(self): macText = self.macEdit.text() if macText == '': msgBox = QMessageBox(QMessageBox.Warning,u'輸入為空',u'參數(shù)不能為空,請重新操作!') msgBox.exec_() else: result = re.sub(r"(?<=\w)(?=(?:\w\w)+$)", " ", unicode(macText)) # print(u'mac地址為:%s' % result) self.httpSend(result) # 創(chuàng)建HTTP連接 def httpSend(window,mac): httpClient = None try: response = httpClient.getresponse() if response.status == 200 and response.reason == 'OK': msgBox = QMessageBox(QMessageBox.Information,u'設(shè)置成功',u'相機(jī)MAC地址設(shè)置成功,請等待相機(jī)重新啟動!') msgBox.exec_() except Exception, e: # print e msgBox = QMessageBox(QMessageBox.Warning,u'操作失敗',u'操作失敗,請重新操作!') msgBox.exec_() finally: if httpClient: httpClient.close() # 創(chuàng)建HTTP連接 def httpDisconnect(window): httpClient = None try: response = httpClient.getresponse() if response.status == 200 and response.reason == 'OK': msgBox = QMessageBox(QMessageBox.Information,u'斷開成功',u'現(xiàn)在相機(jī)已經(jīng)進(jìn)入校準(zhǔn)模式,可以進(jìn)行校準(zhǔn)!') msgBox.exec_() except Exception, e: # print e msgBox = QMessageBox(QMessageBox.Warning,u'操作失敗',u'操作失敗,請重新操作!') msgBox.exec_() finally: if httpClient: httpClient.close() #main if __name__: app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())
安裝打包程序
pip install pyinstaller
也可以源碼安裝,下載源碼包,然后進(jìn)入包目錄,執(zhí)行下面的命令(需要安裝setuptools):
python setup.py install
安裝完后,檢查安裝成功與否:
pyinstaller --version
安裝成功后,就可以使用下面的命令了:
pyinstaller : 打包可執(zhí)行文件的主要命令,詳細(xì)用法下面會介紹。
pyi-archive_viewer : 查看可執(zhí)行包里面的文件列表。
pyi-bindepend : 查看可執(zhí)行文件依賴的動態(tài)庫(.so或.dll文件)
pyi-… : 等等。
pyinstaller的語法:
pyinstaller [options] script [script ...] | specfile
最簡單的用法,在和myscript.py同目錄下執(zhí)行命令:
pyinstaller pyqt.py
然后會看到新增加了兩個目錄build和dist,dist下面的文件就是可以發(fā)布的可執(zhí)行文件,對于上面的命令你會發(fā)現(xiàn)dist目錄下面有一堆文 件,各種都動態(tài)庫文件和myscrip可執(zhí)行文件。有時這樣感覺比較麻煩,需要打包dist下面的所有東西才能發(fā)布,萬一丟掉一個動態(tài)庫就無法運行了,好 在pyInstaller支持單文件模式,只需要執(zhí)行:
pyinstaller -F pyqt.py
你會發(fā)現(xiàn)dist下面只有一個可執(zhí)行文件,這個單文件就可以發(fā)布了,可以運行在你正在使用的操作系統(tǒng)類似的系統(tǒng)的下面。
當(dāng)然,pyinstaller還有各種選項,有通用選項,如-d選項用于debug,了解pyInstaller執(zhí)行的過程;還有一些針對不同平臺的選項,具體用法可以訪問PyInstaller官方WIKI。
PyInstaller的原理簡介
PyInstaller其實就是把python解析器和你自己的腳本打包成一個可執(zhí)行的文件,和編譯成真正的機(jī)器碼完全是兩回事,所以千萬不要指望 成打包成一個可執(zhí)行文件會提高運行效率,相反可能會降低運行效率,好處就是在運行者的機(jī)器上不用安裝python和你的腳本依賴的庫。在Linux操作系 統(tǒng)下,它主要用的binutil工具包里面的ldd和objdump命令。
PyInstaller輸入你指定的的腳本,首先分析腳本所依賴的其他腳本,然后去查找,復(fù)制,把所有相關(guān)的腳本收集起來,包括Python解析器,然后把這些文件放在一個目錄下,或者打包進(jìn)一個可執(zhí)行文件里面。
可以直接發(fā)布輸出的整個文件夾里面的文件,或者生成的可執(zhí)行文件。你只需要告訴用戶,你的應(yīng)用App是自我包含的,不需要安裝其他包,或某個版本的Python,就可以直接運行了。
需要注意的是,PyInstaller打包的執(zhí)行文件,只能在和打包機(jī)器系統(tǒng)同樣的環(huán)境下。也就是說,不具備可移植性,若需要在不同系統(tǒng)上運行,就必須針對該平臺進(jìn)行打包。
來看一下最后的界面
相關(guān)文章
python 實現(xiàn)百度網(wǎng)盤非會員上傳超過500個文件的方法
這篇文章主要介紹了python 實現(xiàn)百度網(wǎng)盤非會員上傳超過500個文件的方法,幫助大家更好的利用python解決問題,感興趣的朋友可以了解下2021-01-01解決Django后臺ManyToManyField顯示成Object的問題
今天小編就為大家分享一篇解決Django后臺ManyToManyField顯示成Object的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08淺談Python在pycharm中的調(diào)試(debug)
今天小編就為大家分享一篇淺談Python在pycharm中的調(diào)試(debug),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11一個月入門Python爬蟲學(xué)習(xí),輕松爬取大規(guī)模數(shù)據(jù)
利用爬蟲我們可以獲取大量的價值數(shù)據(jù),從而獲得感性認(rèn)識中不能得到的信息,這篇文章給大家?guī)砹艘粋€月入門Python學(xué)習(xí),爬蟲輕松爬取大規(guī)模數(shù)據(jù),感興趣的朋友一起看看吧2018-01-01