欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ubuntu中配置pyqt4環(huán)境教程

 更新時(shí)間:2017年12月27日 08:46:48   作者:懟碼人生  
本文給大家分享的是在Ubuntu系統(tǒng)中配置pyqt4的詳細(xì)教程,有需要的小伙伴可以參考下

相機(jī)校準(zhǔn)前需要設(shè)置wifi的mac地址和切換校準(zhǔn)模式,之前寫的命令行工具,去了工廠發(fā)現(xiàn)使用可能有障礙,就做了個(gè)小應(yīng)用程序,用了兩種方法,先看一下第一種(不想選擇的)

使用Tkinter做圖形界面

Tkinter寫界面麻煩,文檔資料也不是很多,這里只做代碼展示

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
from Tkinter import *      # 導(dǎo)入 Tkinter 庫(kù)
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ù)不能為空,請(qǐng)重新操作!")
    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é)時(shí)候自學(xué)過(guò)一點(diǎn)Qt4.8.4的東西,所以比較傾向于用pyqt開發(fā),跨平臺(tái),而且資料也比較齊全,特別是Qt脫離諾基亞后這幾年發(fā)展迅猛,很多公司都開始采用Qt來(lái)開發(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ù)不能為空,請(qǐng)重新操作!')
 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è)置成功,請(qǐng)等待相機(jī)重新啟動(dòng)!')
 msgBox.exec_() 
 except Exception, e:
 # print e
 msgBox = QMessageBox(QMessageBox.Warning,u'操作失敗',u'操作失敗,請(qǐng)重新操作!')
 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'操作失敗,請(qǐng)重新操作!')
 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ì)用法下面會(huì)介紹。

pyi-archive_viewer : 查看可執(zhí)行包里面的文件列表。

pyi-bindepend : 查看可執(zhí)行文件依賴的動(dòng)態(tài)庫(kù)(.so或.dll文件)

pyi-… : 等等。

pyinstaller的語(yǔ)法:

pyinstaller [options] script [script ...] | specfile

最簡(jiǎn)單的用法,在和myscript.py同目錄下執(zhí)行命令:

pyinstaller pyqt.py

然后會(huì)看到新增加了兩個(gè)目錄build和dist,dist下面的文件就是可以發(fā)布的可執(zhí)行文件,對(duì)于上面的命令你會(huì)發(fā)現(xiàn)dist目錄下面有一堆文 件,各種都動(dòng)態(tài)庫(kù)文件和myscrip可執(zhí)行文件。有時(shí)這樣感覺(jué)比較麻煩,需要打包dist下面的所有東西才能發(fā)布,萬(wàn)一丟掉一個(gè)動(dòng)態(tài)庫(kù)就無(wú)法運(yùn)行了,好 在pyInstaller支持單文件模式,只需要執(zhí)行:

pyinstaller -F pyqt.py

你會(huì)發(fā)現(xiàn)dist下面只有一個(gè)可執(zhí)行文件,這個(gè)單文件就可以發(fā)布了,可以運(yùn)行在你正在使用的操作系統(tǒng)類似的系統(tǒng)的下面。

當(dāng)然,pyinstaller還有各種選項(xiàng),有通用選項(xiàng),如-d選項(xiàng)用于debug,了解pyInstaller執(zhí)行的過(guò)程;還有一些針對(duì)不同平臺(tái)的選項(xiàng),具體用法可以訪問(wèn)PyInstaller官方WIKI。

PyInstaller的原理簡(jiǎn)介

PyInstaller其實(shí)就是把python解析器和你自己的腳本打包成一個(gè)可執(zhí)行的文件,和編譯成真正的機(jī)器碼完全是兩回事,所以千萬(wàn)不要指望 成打包成一個(gè)可執(zhí)行文件會(huì)提高運(yùn)行效率,相反可能會(huì)降低運(yùn)行效率,好處就是在運(yùn)行者的機(jī)器上不用安裝python和你的腳本依賴的庫(kù)。在Linux操作系 統(tǒng)下,它主要用的binutil工具包里面的ldd和objdump命令。

PyInstaller輸入你指定的的腳本,首先分析腳本所依賴的其他腳本,然后去查找,復(fù)制,把所有相關(guān)的腳本收集起來(lái),包括Python解析器,然后把這些文件放在一個(gè)目錄下,或者打包進(jìn)一個(gè)可執(zhí)行文件里面。

可以直接發(fā)布輸出的整個(gè)文件夾里面的文件,或者生成的可執(zhí)行文件。你只需要告訴用戶,你的應(yīng)用App是自我包含的,不需要安裝其他包,或某個(gè)版本的Python,就可以直接運(yùn)行了。

需要注意的是,PyInstaller打包的執(zhí)行文件,只能在和打包機(jī)器系統(tǒng)同樣的環(huán)境下。也就是說(shuō),不具備可移植性,若需要在不同系統(tǒng)上運(yùn)行,就必須針對(duì)該平臺(tái)進(jìn)行打包。

來(lái)看一下最后的界面

相關(guān)文章

最新評(píng)論