安裝及界面繪制
首先安裝pyqt5及pyqt5tools,使用豆瓣源
pip install pyqt5 -i https://pypi.doubanio.com/simple/
pip install pyqt5-tools -i https://pypi.doubanio.com/simple/
在安裝完成后,通過Qt Designer創建自己想要的界面,創建完成后在ui文件所在路徑通過cmd執行
pyuic5 -o mainpage.py mainpage.ui
將mainpage轉換為py文件
py文件內容為:
class Ui_mainpage(object): def setupUi(self, mainpage): ...
再創建一個新的py文件,如main.py去調用該界面文件
新py文件內容如下:
class main(QmainWindow, Ui_mainpage): def __init__(self, parent=None): super().__init__() ...
pyqt的一些常用代碼
設置界面電腦屏幕居中
def center_setting(self): '''居中顯示''' screen = QDesktopWidget().screenGeometry() size = self.geometry() w = (screen.width() - size.width()) / 2 h = (screen.height() - size.height()) / 2 self.move(w, h)
設置界面圖標,該方法在將腳本生成為exe后,仍然需要在exe所在文件夾下放置圖標,否則圖標會失效
def icon_setting(self): self.setWindowIcon(QIcon('xxx.ico'))
設置界面大小為固定值,且不可改動,如伸縮、最大
def windowsize_setting(self): '''不可調整大小''' self.setFixedSize(1190, 615)
設置背景顏色或圖片,生成為exe后,圖片仍需像icon圖標一樣處理
def background_setting(self): '''背景顏色或圖片''' bg = QtGui.QPalette() # 背景顏色 bg.setColor(self.backgroundRole(), QColor(248, 248, 255)) # 背景圖片 # bg.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap(''))) self.setPalette(bg) self.setAutoFillBackground(True)
pyqtSlot()修飾器可以將按鈕操作直接定義為一個方法,如下,名為buttonname的按鈕在被點擊后,會執行...中的代碼
@pyqtSlot() def on_buttonname_clicked(self): ...
下拉框添加數據及點擊對應下拉框選項的信號發射
# 如果獲得的數據是列表 if isinstance(namelist, list): self.drop_down_box.addItems(namelist) # 如果獲得的數據非列表 if isinstance(name, str): self.drop_down_box.addItem(name) # 選中某個下拉框選項時,發射該信號去執行new_func方法 self.drop_down_box.connect(self.new_func) def new_func(self, i): # i為被選中的值 ...
QMessageBox提示框,個人比較喜歡這個提示框,主要是代碼量少,下圖為其表現
def operation_fail(self, txt): '''操作失敗提示''' notice = QMessageBox.about(self, '提示', txt)
繪制線形圖
使用的庫為pyqtgraph
pyqtgraph如果想去了解,可直接用以下代碼喚起其演示界面,其常用代碼均可在該界面上找到
import pyqtgraph.explames as pg_e pg_e.run()
因為沒有設計'展示鼠標所在點的坐標'的功能,所以繪制線形圖使用GraphicsLayoutWidget,其實現原理,簡單來說就是給一個列表,然后直接把列表數據刷在界面上,各種數據點直接用線連起來
首先需要在Qt Designer中生成對應控件,Qt Designer無法直接創建GraphicsLayoutWidget,首先需要創建一個Widget,再將其提升為GraphicsLayoutWidget,具體如下:
GraphicsLayoutWidget控件的一些基本設置
import pyqtgraph as pg def glw_setting(self): '''GraphicsLayoutWidget控件的背景、線條設置,需要在setupUi前執行''' # 控件的背景顏色 pg.setConfigOption('background', (248, 248, 255)) # 線條的顏色 pg.setConfigOption('foreground', 'k') # 啟用抗鋸齒( 讓曲線更加光滑) pg.setConfigOptions(antialias=True) def _glw_setting(self): '''GraphicsLayoutWidget控件的部分設置,需要在setupUi后設置''' # 設置標題 cpu = self.glwname.addPlot(title="xxx") # 設置x軸刻度范圍為0到10 cpu.setXRange(0, 10, padding=0) # 設置y軸刻度 cpu.setYRange(0, 10, padding=0) 繪制代碼如下 def glwname_show_on_layout(self): mylist = list(range(1,100)) # 繪制前先清空下,以免有舊數據 self.glwname.clear() _glw = self.glwname.addPlot(title='xxx') # 繪制線形圖 _glw.plot(y=mylist, pen=pg.mkPen((0, 0, 0), width=0.8))
通過線程讓界面數據顯示變為可控
使用QThread
class mythread(QThread): mysignal = pyqtSignal(int) def __init__(self): self.status = True def run(self): '''函數名必須命名為run''' while self.status: ... result = get_your_result() # 發送信號 self.mysignal.emit(result)
然后在main.py的main類中添加對應的處理
在你覺得合適的地方構建兩者的關聯,以下代碼在main.py的main類中編寫
self.myTh = mythread() self.myTh.mysignal.connect(self.my_func) def my_func(self): # 收到對應信號后即會開始執行下方函數 self.glwname_show_on_layout()
想要讓線程開始,可以通過按鈕去start線程
@pyqtSlot() def on_startbutton_clicked(self): self.myTh.start()
想要結束線程,也可以通過按鈕去關閉
@pyqtSlot() def on_stopbutton_clicked(self): self.myTh.status = False self.myTh.quit()
小結
總得來說,pyQt用來創建桌面程序整體來說還算合格,但對於測試人員來說,實際上過於雞肋,因此建議只是了解,無需深究
以上僅為個人愚見,如有冒犯,還請見諒
以下即為通過pyQt實現的程序
附:如何用python進行exe打包
首先安裝pyinstaller
在腳本所在目錄cmd執行
pyinstaller -F -i 圖標 -w 主文件 -p 關聯文件1 -p 關聯文件2 -p 關聯文件3 #此指令生成的exe無cmd pyinstaller -F -i 圖標 -c 主文件 -p 關聯文件1 -p 關聯文件2 -p 關聯文件3 #此指令生成的exe帶cmd
如果遇到生成單個無cmd的exe,運行exe后無法調用到計算機cmd情況,請生成自帶cmd的exe,不過這樣會大幅度增加程序打開的時間,暫時未找到更好的解決方案