1. 程式人生 > >用Python寫介面--上位機開發

用Python寫介面--上位機開發

Python真的可以說是無所不能,上到人工智慧、影象識別、下到控制電機、爬蟲、資料處理,前不久發現Python還可以做介面,雖然比較醜,但是還是可以一試。

Python內建圖形介面庫——Tkinter

Tkinter 模組(Tk 介面)是 Python 的標準 Tk GUI 工具包的介面 .Tk 和 Tkinter 可以在大多數的 Unix 平臺下使用,同樣可以應用在 Windows 和 Mac 系統裡。也就是說用這個內建的寫的,在哪都能跑,接下來簡單說一下用法。

主要應用場景

用Python做介面,無非就是想要有一個影象化介面來輔助你的程式執行,我這個還要傳輸視訊,因此要對於我來說,常用的有以下幾個控制元件:
* Button 按鈕控制元件;在程式中顯示按鈕。
* Frame 框架控制元件;在螢幕上顯示一個矩形區域,多用來作為容器
* Label 標籤控制元件;可以顯示文字和點陣圖
* Menubutton 選單按鈕控制元件,由於顯示選單項。
* Menu 選單控制元件;顯示選單欄,下拉選單和彈出選單
* Message 訊息控制元件;用來顯示多行文字,與label比較類似
* Scrollbar 滾動條控制元件,當內容超過視覺化區域時使用,如列表框。.
* Text 文字控制元件;用於顯示多行文字
* tkMessageBox 用於顯示你應用程式的訊息框。

使用方法

通過我的學習,我覺得沒有什麼比實戰來的更簡單直接了,你看了我做的,照著寫,就能做個差不多的,然後再查一查API文件,基本就掌握了。

Hello World

from tkinter import *

class Application(Frame):

    def say_hi(self):
        print ("hi there, everyone!")

    def createWidgets(self):
        self.QUIT = Button(self)
        self.QUIT["text"] = "QUIT"
self.QUIT["fg"] = "red" self.QUIT["command"] = self.quit self.QUIT.pack({"side": "left"}) self.hi_there = Button(self) self.hi_there["text"] = "Hello", self.hi_there["command"] = self.say_hi self.hi_there.pack({"side": "left"}) def __init__
(self, master=None):
Frame.__init__(self, master) self.pack() self.createWidgets() root = Tk() app = Application(master=root) app.mainloop() root.destroy()

Hello World

注意,我的Python版本是基於3以上的,所以程式碼會和2版本有些不同。
總的來說,建立一個這樣的分為5步
1. 建立按鈕
2. 定義按鈕名稱
3. 定義按鈕屬性
4. 定義按鈕功能
5. 生成佈局

標籤、按鈕和滾動條

#!/usr/bin/env python
# -*- coding: UTF-8 -*- 

from tkinter import *
#定義功能
def resize(ev=None):
    label.config(font='Helvetica -%d bold' % scale.get())
#定義介面
top = Tk()
top.geometry()
#定義標籤及屬性
label = Label(top, text = 'hello world!', font = 'Helvetica -12 bold')
label.pack(fill=Y,expand=1)
#定義滾動條
scale = Scale(top, from_=10, to=40, orient=HORIZONTAL, command=resize)
scale.set(12)
scale.pack(fill=X, expand=1)

#定義推出標籤
quit = Button(top, text="QUIT", command=top.quit, activeforeground='white', activebackground='red')
quit.pack()
#執行主程式
mainloop()

放大縮小

小結

看了這些,基本上我的需求就都滿足了,但是後來我還是用了另外一個GUI工具,原因只有一點,大家可能注意到了,就是介面裡面各個控制元件的位置是通過程式碼來確定的,一兩個還好,而我的介面比較複雜,所以還是需要一個可以方便拖拽的工具,Tkiner也有,不過及其難用,所以忽略了。

PyQT

比較被認可的第三方工具主要是WxPython的PyQT,我大概看了一下,兩個的參考資料都不算多,wx是一個個人開發的,前一段時間停止更新了,後來又有大神接手,而PyQT是由QT轉過來的,公司產品,感覺比較好,最後用的PyQT,其實不管用哪個,都能達到你做一個小介面的目的。

安裝

PyQT安裝

QtDesigner安裝

QtDesigner簡單介紹

Qtdesigner是Python設計裡面一個非常實用的工具,使得人們編寫qt介面可以不僅僅是使用純程式碼,而可以在視覺化的基礎上設定,非常方便。

QtDesigner安裝

使用者安裝PyQt5後,系統會預設安裝QtDesigner工具。
QtDesigner的預設預設路徑: C:\python\python\Lib\site-packages\PyQt5\designer.exe
找不到搜尋一下

安裝PyQt5-tools

Python環境需要安裝designer。 在終端執行pip命令安裝完PyQt5-tools。

pip install PyQt5-tools

配置PyCharm

開啟Pycharm,然後按照下面路徑開啟Extrernal Tools:
File->Tools->Extrernal Tools->點選“+”號->彈出對話方塊,配置如下:

(1).增加QT設計介面“Qt Designer” —— 這個就是設計Qt介面的工具
  • Program選擇PyQt安裝目錄中 designer.exe 的路徑
  • Work directory 使用變數 ProjectFileDir (點選後面的…)
    [圖片上傳失敗…(image-e81206-1526303573660)]
(2).增加“PyUIC” ——這個主要是用來將 Qt介面 轉換成 py程式碼
  • Program選擇PyQt安裝目錄中 pyuic5.bat 的路徑
  • parameters設定為FileName -o FileNameWithoutExtension.py
  • Work directory 設定為 ProjectFileDir (點選後面的…)

qtpiu

sucess

可以在tools裡面看到我們的工具

qt_tools

簡介

因為是第三方工具,所以又把一些功能做了整合,和分類,大概有以下常用模組(不常用的我沒寫。)
* QtCore:包含了核心的非GUI功能。此模組用於處理時間、檔案和目錄、各種資料型別、流、URL、MIME型別、執行緒或程序。
* QtGui包含類視窗系統整合、事件處理、二維圖形、基本成像、字型和文字。
* Qtwidgets模組包含創造經典桌面風格的使用者介面提供了一套UI元素的類。
* QtMultimedia包含的類來處理多媒體內容和API來訪問相機和收音機的功能。
* Qtwebsockets模組包含實現WebSocket協議類。
* QtWebKit包含一個基於Webkit2圖書館Web瀏覽器實現類。
* Qtwebkitwidgets包含的類的基礎webkit1一用於qtwidgets應用Web瀏覽器的實現。
* QtXml包含與XML檔案的類。這個模組為SAX和DOM API提供了實現。
* QtSql模組提供操作資料庫的類。

實戰

1. 開啟Pycharm的介面設計工具QTDsigner

Pycharm->Tools->External Tools->QTDesigner

qt_tools

2. 建立介面,選擇Wdiget

qt_disigner_5.2

3. 分別在視窗新增如下控制元件,Lable、pushButton、checkBox、lineEdit如圖所示:

QQ_20170502100725

4. 做好佈局後,把檔案儲存到我們的專案目錄下

QQ_20170502101106

5. 把.ui檔案轉換成.py檔案

右鍵.ui使用PyUIC工具把.ui檔案轉換成.py檔案
轉換ui

生成的.py檔案

生成的.py檔案

6. 測試我們的.py檔案:

在我們的login.py檔案下面新增

if  __name__=="__main__":
    import  sys
    app=QtWidgets.QApplication(sys.argv)
    widget=QtWidgets.QWidget()
    ui=Ui_form()
    ui.setupUi(widget)
    widget.show()
    sys.exit(app.exec_())

好了,右鍵執行login.py。就可以看到登入介面了

小結

未完待續