• 3D列印服務
  • #maker+t=market
  • COSPLAY 3D 建模
  • 1
  • 2
  • 3

Python人工智慧圖控 - 研習交流廳 造訪社團 » 工具

原文網址 石小川
2020-01-07 09:56:49

今天想介紹三本好書給大家參考,對於想窮盡宇宙知識的朋友來說應該是一個很好的入門書籍。影像、語音、雷達數位信號處理、神經網路底層的推導式子都是這些基本知識的延伸,立志當科學家的朋友強烈建議一定要看! (一) 數學中美麗的詩篇 - 傅立葉分析 數學中美麗的詩篇是 "傅立葉轉換",而 電磁學中美麗的詩篇是 "馬克斯威爾方程式". 今天要介紹的這本書 ~『數學中美麗的詩篇 - 傅立葉分析』, 是復漢71年出版, 是我很喜歡的一本書, 在學生時期我就對傅立葉級數很著迷, 這本書是我的心靈捕手, 它是大自然的樂譜, 描述一段段美麗的音符, 所幸找到它填補了我心靈上的空虛, 懂得能欣賞它的美是幸福的! 哈哈! 我發現我也是怪咖一個^^ 傅立葉轉換的應用範圍廣泛, 舉凡光學、聲學、電磁學、機械都可看到它的蹤跡, 我在研究語音及影像辨識的時候也是以傅立葉轉換做頻譜特徵分析的, 現在做能源更少不了它, 是非常好用的數學分析工具, 介紹給有需要的朋友! p.s. 雖然書局也有其他傅立葉相關著作, 但是我覺得這本書還是比較佳, 這是已經是絕版的書, 圖書館應該還找的到吧! 圖1 ? (二)A Student's Guide to Maxwell's Equations(中譯本: 電磁學天堂祕笈) 裡面內容淺顯易懂, 看完不會有見樹不見林的感覺, 適合想真正瞭解電磁學Maxwell's Equations涵義的人閱讀, 我教研究生及工程師時也是用此當做輔助教材, 可參考看看! 圖2、3 ? ? ( 三 ) 推薦研讀費曼物理學講義 熟讀唐詩三百首,不會吟詩也會吟。同樣的,研讀費曼物理學,不識科學也很難了。 費曼物理學講義(The Feynman Lectures on Physics)不同於其他教科書的無趣,章節精彩實用,記的年少時除了迷戀金庸小說之外,費曼物理學講義就是我最愛的章回小說了。目前工作遇上瓶頸時我會翻翻費曼物理學講義,還能找到不少線索提供研發的參考呢! 對想瞭解宇宙的朋友更值得一看,融會貫通之後就能欣賞造物者之美。我腦袋稍微開竅也是拜此書所賜。 對讀者的建議是最好有微積分的基礎較能輕鬆閱讀,亞馬遜網路書局有賣 ( http://www.amazon.com/dp/0465023827/ref=dra_a_rv_ff_fx_it_P2000_1000?tag=dradisplay-20 ), 或打上關鍵字 "The Feynman Lectures on Physics"可以完全免費線上閱讀。 圖4 ?

廖偉
2020-03-02 14:30:05

逛到這邊突然心裡也有共鳴,不知版大有無也看過這本https://www.sanmin.com.tw/product/index/001416577

石小川
2020-03-02 15:56:31


原文網址 石小川
2019-12-19 11:59:26

目前自動化機器很多都是用虛擬儀表板來顯示機器狀態,例如飛行儀表板(圖1、2),今天跟大家分享一下如何用Python+ PyQt5設計出夠炫的虛擬儀錶,沒時間寫註解,貼上程式碼,有問題可互相討論! ? ? Step1. 準備一個背景透明的儀表png圖檔(圖3)。 ? Step2. 用Qt Designer設計UI(不熟悉話,可先找我之前寫的文章K一下)(圖4)。 當然也可以不經過PyQt5設計UI,只不過有工具來設計介面程式會省時多了。 ? Step3. 設計虛擬儀表類別class QGauge(QWidget)。 在此雖然表示轉速,但套用不同的公式也可以表示溫度、壓力、高度、流量等。 我直接貼程式(gauge.py)如下: #----------------------------------- # gauge.py #----------------------------------- # -*- coding: utf-8 -*- ''' 石小川 / Michael Shih 光騰高科技工作室 / Quantum Tek. ''' #PyQt5模組 from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget from PyQt5.QtCore import Qt, pyqtSignal, QRect from PyQt5.QtGui import QPixmap, QImage, QIcon, QPainter, QPen, QBrush, QPalette #------------------------------------------------------------------------------ class QGauge(QWidget): rpmValueChanged = pyqtSignal(int) #轉速變化時發射的信號 #------------------------------------------------------------------------- def __init__(self, parent=None): super().__init__(parent) #self .__imageGauge = QImage(r'E:\Instrument\image\rpm.png') self.__imageGauge = QImage(r'rpm.png') self.__rpmValue = 10 self.color = Qt.green self._startAngle = -40 * 16 self._rotateAngle = 260 * 16 #------------------------------------------------------------------------- def rpm2Arc(self, rpm): start = 230 - rpm rotate = rpm return start * 16, rotate * 16 #------------------------------------------------------------------------- def set_rpmValue(self, rpm): self.__rpmValue = rpm self.rpmValueChanged.emit(rpm) self._startAngle, self._rotateAngle = self. rpm2Arc(rpm) self.repaint() #------------------------------------------------------------------------- def get_rpmValue(self): return self.__rpmValue #------------------------------------------------------------------------- def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) pen = QPen() pen.setWidth(10) if(self.__rpmValue < 115): self.color = Qt.green elif(self.__rpmValue > 115 and self.__rpmValue < 222): self.color = Qt.yellow elif(self.__rpmValue > 222): self.color = Qt.red pen.setColor(self.color) pen.setStyle(Qt.SolidLine) pen.setCapStyle(Qt.FlatCap) painter.setPen(pen) w = self.width() h = self.height() rect = QRect(0, 0, self.width(), self.height()) painter.drawImage(rect, self.__imageGauge) lw = w-50 lh = h-60 rect2 = QRect(85, 88, lw/2, lh/2) painter.drawArc(rect2, self._startAngle, self._rotateAngle)
Step4. 主程式,需引用QGauge類別(from gauge import QGauge)。
我直接貼程式(rpm.py)如下: #----------------------------------- # rpm.py #----------------------------------- # -*- coding: utf-8 -*- ''' 石小川 / Michael Shih 光騰高科技工作室 / Quantum Tek. ''' #引用程式會用到的模組 import sys #引用設計好的UI介面 from panel import Ui_MainWindow from gauge import QGauge #PyQt5模組 from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget from PyQt5 import QtWidgets from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtGui import QPixmap, QImage, QIcon, QPainter, QPen, QBrush #------------------------------------------------------------------------------ #定義類別MyWindow繼承自已設計好的介面Ui_MainWindow #------------------------------------------------------------------------------ class MyWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): #類別初始化 super(MyWindow, self).__init__(parent) self.setupUi(self) self.setWindowTitle("Gauge - RPM x 1000") self.setWindowIcon(QIcon('COMPASS')) self.setFixedSize(361, 381) self.gauge.set_rpmValue(10) #------------------------------------------------------------------------- #刻度盤變化會執行此函數 def slider_valueChanged(self, value): self.gauge.set_rpmValue(value) #------------------------------------------------------------------------------ def main(): app = QApplication(sys.argv) myWin = MyWindow() myWin.show() sys.exit(app.exec_()) #------------------------------------------------------------------------------ if __name__ == '__main__': main()
Step 5. 執行結果。 轉速超過4000顯示黃色指示燈(圖5)。 ? 轉速超過8000顯示紅色指示燈(圖6)。 ?

林永仁
2019-12-19 12:01:12

哥借分享

Jade Yang
2019-12-19 12:07:53

Pablo Tseng
2019-12-19 12:09:56

哇 這資料找好久 感謝 感謝

Brian Lin
2019-12-20 17:56:04

好強⋯⋯圖控這一部分,我也找了好久。
感謝⋯⋯⋯⋯


原文網址 石小川
2019-12-16 09:18:25

分享給想要了解Mach3及USB控制卡如何通訊的朋友參考,可進一步修改成Python版本。

Mach3 USB程式是以HID裝置類型通訊協定作為溝通管道, 因為現在Windows 作業系統都有內建支援HID裝置的驅動程式, 所以焦點只要設計PC應用程式即可, 省掉很多麻煩事情.

如果用抓封包工具程式(Wireshark 或 Bus Hound)觀察Mach3 USB封包可得知, HID報告描述元(Report)的每次輸入/輸出資料交易是以61個位元組(Byte)為單位送出或接收, 只要解析這些位元組即可直接控制USB Mach3 CNC運動控制卡, 不須Mach3介入, 這樣做的好處是可以自已設計一些人工智慧演算法(例如影像辨識)去直接控制CNC機台做自動光學檢測(AOI), 或改裝CNC成機器手等. 當然有些非Mach3 CNC控制卡廠商有推出API開發包, 應用程式直接呼叫API就更方便了, 這樣就不需要了解煩人的底層封包問題, 不過這篇是要分享給想設計類似Mach3程式或製作USB Mach3 CNC運動控制卡的人參考, 由於資料太多, 不想洗板, 我就列出部分範例提供參考。

我的CNC機器裝置配備是USB Mach3 CNC六軸連動控制卡, 螺桿Pitch=5mm, 步進驅動128細分.

解析後的封包資料如下:
基本上Reset , M code, G Code都要解碼.

(A)繼電器控制
M204/M205碼我是規劃成繼電器控制警示燈
M204 Code(Output 7 ON) :
public string[] Output = { "02 06 58 00 09 20 00 00 f0 f7 19 00 97 b1 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 00 00 00 00 1c f8 19 00 0c f8 19 00 10 80 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 1c f8 19 00 00" };

M205 Code(Output 7 OFF) :
public string[] Output = { "02 06 58 00 09 00 00 00 f0 f7 19 00 97 b1 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 00 00 00 00 1c f8 19 00 0c f8 19 00 10 80 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 1c f8 19 00 00" };

p.s. 標註的02 06 58 是M控制碼, 09 20/09 00 是On/Off作動參數.

(B)步進馬達控制
G0 Xn Code :
public string[][] G0X = {
//G0 X0
new string[]
{"02 0e 55 e6 ff 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 06 df 59 77 34 ef 55 77 f8 5b 38 a0 00 00 00 00 00 c0 2c 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00",
"02 0e 55 b4 ff 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 06 df 59 77 34 ef 55 77 f8 5b 38 a0 00 00 00 00 00 c0 2c 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00",
.
.
};

p.s. 標註的02 0e 55 是G0控制碼, e6 ff/b4 ff 是馬達脈衝參數.

另外值得一提的是Mach3步進馬達的脈衝控制是以圖中(G0 X5)所示的方式控制, 只要遵照斜率及內插數值就可組合出想要馬達移動的距離及速度了, 如果是六軸連動當然更複雜了!

沒圖沒真相, 最後簡單的寫了一個小程式Demo一下, 有興趣的朋友可參考一下囉!


原文網址 石小川
2019-12-15 18:14:44

[開發機器人工具箱- G9 Toolkit v2.0]

這個板子是我設計用來開發機器人運算核心 - G9模組的開發板, G9模組採用的是ADI公司的高速DSP晶片, 多顆G9模組陣列可平行運算, 適合跑類神經網路演算法, 目前也用在AI產品上, 希望很快能跟大家見面, 介紹給大家^^

[G9 Module (G9 類神經網路晶片模組)]
CPU: ADI 高速DSP
size: 3.2cm x 3.2cm

這顆是我設計的第三代類神經網路晶片模組, 既是單晶片IO控制電腦, 也是高速數位訊號處理DSP電腦, 代號我取名G9, 內部有一顆高速DSP內核, 外部輸入電壓是DC5V,DSP內核工作電壓為DC3.3V,目前設定DSP工作頻率為400MHz。可實現語音、影像、類神經網路等演算法Real time的需求。現在我的專案是把它拿來Run自動導航及光學雷達, 機器人視覺聽覺等深度學習演算法用。

主要功能是語音/影像辨識及馬達控制, 開發軟體是C語言, 可跑類神經網路(ANN)及平行處裡運算, 目前只提供員工內部教育訓練及開發產品上, 將來開發手冊完備後再Release G9 Toolkit v2.0給有興趣研發的人士.

圖1. G9 Toolkit v2.0.
圖2. G9 Module.
圖3. G9 Module可接CMOS Sensor做影像辨識.

Eric Yang
2019-12-15 20:52:56

加一


原文網址 石小川
2019-12-15 18:02:53

繼上回介紹自製相容ARM9處理器核心後, 現在再推薦一款新的計算機架構, 而且是免費開源IP(矽智財)的CPU架構給有興趣的好友多一項參考設計, 這是目前國內外晶片廠最火紅的RISC-V(發音risk-five), 只要你願意可上RISC-V基金會官方網站下載相關開發工具及資源, 根據自已的需求設計32位元或64位元CPU(其實也有已經設計好的RISC-V核心提供下載), 然後以Verilog 燒寫在FPGA上即可完成自已的CPU架構, 值得一提的是雖然RISC-V它是免費的, 但是它的CPU效能相對於x86 及ARM來說毫不遜色, 2016年終於出現一個可以抗衡x86及ARM年代, 值得推薦! 另外 "手把手教你設計CPU-RISC-V處理器篇"這本書也很適合初學者入門, 對於有興趣設計AI或CPU晶片的好友可參考看看. 不過感傷的是這幾年很多科技技術書籍是簡體字, 國內寫書的人似乎逐漸凋零了, 這是國家競爭力的一項指標, 唉! 你懂我意思的^^" p.s. RISC-V(發音為「risk-five」)是基於已建立的精簡指令集(RISC)原則的一個開源指令集架構(ISA)。 與大多數指令集相比,RISC-V指令集可以自由地用於任何目的,允許任何人設計、製造和銷售RISC-V晶片和軟體, 請參考下列維基百科: https://zh.wikipedia.org/zh-tw/RISC-V

曾希哲
2019-12-15 18:47:33

真該買本好好讀一讀

林永仁
2019-12-16 08:28:13

哥借分享


原文網址 石小川
2019-12-15 17:44:44

對於Linux工程師來說內嵌系統交叉編譯環境的建立較複雜, 手動編譯起來時常是一個噩夢, 其實只要資料完備不會很困難, 下面我把一些講義分享出來給有需要的好友參考一下, 期望可以少走一些冤枉路! 我PC的Linux作業系統版本是Fedora 20-i386, Embedded system 是ARM11板子的內嵌系統, 我在PC開發的程式是Qt5.4.1, opencv是3.1.0, PC開發環境下寫好的程式再移植到ARM11板子上, 可正常運作, 沒圖沒真相, 如圖程式是usb camera程式, 可顯示JPG照片及動態顯示攝影機視訊! 由於QT 及 OpenCV arm-linux交叉編譯比較冗長, 我再另闢專欄解說, 這之前我先列出交叉編譯需要用到的一些程式庫的編譯詳細步驟, 有不清楚的地方也可跟我討論一下! //-------------------------------------------------------------------------------
Linux交叉編譯環境建立 講義 交叉編譯(Cross compiler)是在一種處理器架構平台上(如PC-x86架構,此稱PC平台)編譯連結成另一個處理器架構平台(如ARM架構,此稱Target平台)所能執行程式的工具軟體。 A. PC-x86平台環境建立步驟
(1)Install Fedora 20
Download Linux OS,版本為Fedora20-i386-DVD.iso,燒寫
至光碟片,然後安裝作業系統到PC。
先更新作業系統。
yum update -y (2)Install Fedora 20相關工具軟體
yum install –y filezilla putty cmake cmake-gui gcc gcc-c++
yum install –y automake libtool tslib (3)Install arm-linux-gcc
(3-1)解壓縮arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz
執行Fedora 20>>終端機程式,輸入:
tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C /opt/,解壓縮將arm-linux-gcc-4.5.1安裝到/opt/FriendlyARM/toolschain/4.5.1。
p.s. 路徑一定要放在此(/opt/),不能更改,否則會錯誤。
(3-2)將arm-linux-gcc的路徑加到系統環境變數中
method 1. 修改檔案.bashrc(個人環境)
用vi 編輯 /root/.bashrc
最後一行加上:
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
儲存後OS重新登錄User即可作用。
method 2. 修改檔案 /etc/profile(全域環境)
最後一行加上:
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
儲存後須重新開機始可作用。
(3-3)在終端機輸入arm-linux-gcc –v,如果有gcc相關資訊顯示出來表示設定成功。 (4)交叉編譯相關程式庫
如果沒用到可選擇跳過不安裝,詳細交叉編譯方法請看附錄A。
(4-1)交叉編譯tslib
觸控面板驅動函式庫。
(4-2)交叉編譯ffmpeg
影片播放與轉檔函式庫。
(4-3)交叉編譯gtk
圖形介面開發套件。
(4-4)交叉編譯jpeg
Jpeg功能函式庫。
(4-5)交叉編譯png
Png功能函式庫。
(4-6)交叉編譯x264
X264編碼器函式庫。
(4-7)交叉編譯yasm
編譯ffmpeg時可指定用yasm指令編譯,提高編譯速度。
(4-8)交叉編譯zlib
資料壓縮函式庫。
(4-9)交叉編譯qt5.4.1
跨平台的c++應用程式開發工具。 (5)Install Qt Creator
到Qt官方網站:
https://www.qt.io/download-open-source/#section-2
選擇下載Qt Online Installer for Linux 32-bit 線上安裝Qt Creator相關程式。安裝程式會自動安裝PC平台的Qt,至於Target平台的Qt必須手動交叉編譯來安裝。
(為求系統穩定,盡量以Qt 5.4.1為開發版本。) (6)Install Opecv
到Opencv官方網站:
http://opencv.org/downloads.html
選擇下載Opencv-3.1.0.zip 附錄A
A-1. 交叉編譯tslib
功能: 觸控面板驅動函式庫。
在終端機按照步驟輸入指令如下:
(1)git clone https://github.com/kergoth/tslib
//download tslib source code
(2) cp /root/tslib /opt/ -r
//copy /root/tslib to /opt
(3)cd /opt/tslib
//change dir to /tslib
(4)./autogen.sh
//執行安裝腳本
(5) ./configure CC=arm-linux-gcc CXX=CC=arm-linux-g++ --prefix=/opt/tslib-arm --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
//配置tslib
(5) make
//產生makefile
(6) make install
//編譯完成後函示庫自動安裝到 /opt/tslib-arm A-2. 交叉編譯zlib
功能: 提共資料壓縮之用的函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy zlib-1.2.8 to /opt
(2) cd /opt/ zlib-1.2.8
(3) CC=arm-linux-gcc ./configure --prefix=/opt/zlib-arm
(4) make
(5) make install A-3. 交叉編譯jpeg
功能: jpeg函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy jpeg-9 to /opt
(2) cd /opt/ jpeg-9
(3) CC=arm-linux-gcc ./configure --prefix=/opt/jpeg9-arm -- host=arm-linux
(4) make
(5) make install A-3. 交叉編譯png
功能: png函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy libpng-1.6.23 to /opt
(2) cd /opt/ libpng-1.6.23
(3) ./configure CC=arm-linux-gcc --prefix=/opt/png-arm -- host=arm-linux
(4) make
(5) make install A-4. 交叉編譯yasm
功能: yasm指令可提高編譯ffmpeg速度。
在終端機按照步驟輸入指令如下:
(1)download and copy yasm-1.3.0 to /opt
(2)cd /opt/ yasm-1.3.0
(3)./configure CC=arm-linux-gcc --prefix=/opt/yasm-arm --host=arm-linux
(4)make
(5)make install A-5. 交叉編譯x264
功能: x264編碼器函式庫。
在終端機按照步驟輸入指令如下:
(1)download and copy x264-snapshot-20160220-2245-stable to /opt
(2)cd /opt/x264-snapshot-20160220-2245-stable
(3)./configure CC=arm-linux-gcc --enable-shared --host=arm-linux --disable-asm --prefix=/opt/x264-arm
(4)make
(5)make install A-6. 交叉編譯ffmpeg
功能: 影片播放與轉檔函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy ffmpeg-3.1.1 to /opt
(或直接下載: git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg)
(2)cd /opt/ ffmpeg-3.1.1
(3)./configure --enable-cross-compile --cc=arm-linux-gcc --arch=arm --target-os=linux --enable-shared --enable-gpl --disable-stripping --enable-pthreads --enable-small --disable-parsers --disable-optimizations --disable-yasm --disable-armv6 --disable-static --disable-amd3dnow --prefix=/opt/ffmpeg-arm
(4)make
(5)make install

Jade Yang
2019-12-15 18:43:39

林永仁
2019-12-16 09:09:29


原文網址 石小川
2019-11-27 15:30:33

現今開發應用程式已經很少不用視窗當作人機介面(HMI)了,同樣的,如果沒有用圖控方式操作自動化設備的話,相信機器應該也很難賣得出去,就是因為圖控是很重要的一環,所以我特別在這一章節簡潔的介紹一個開發圖控介面不錯的工具 – PyQt5給讀者參考,慎選好的開發工具的確可以讓你省下不少寶貴的時間。 這裡會用一個實例讓讀者了解Python結合圖形視窗的設計流程,熟悉之後在設計儀表控制、機器自動控制等介面將不在是難事, 有興趣的讀者還可改成流行的拖放( drag and drop )圖控應用程式,投資自已學習這門工具是值得的,下面就一步步來實現。 3. 1 安裝 PyQt5 前面如果沒有安裝,現在趕快安裝,方法如下:
在Anaconda Prompt 視窗(Windows 命令提示字元)下先後輸入 pip install PyQt5
pip install PyQt5-tools 安裝完成後最好重開機,在路徑資料夾Anaconda3\Library\bin內會有個執行
檔案designer.exe,請拉到桌面方便使用(注意你的路徑及資料夾可能跟我的是不一樣),至此安裝結束, 接下來可以打開designer設計圖控介面了,如圖3-1所示,我們會用它來設計一個簡單的圖控介面,並展示如何用Python程式引用這個介面的相關知識。 3. 2 認識QT Designer
認識一下圖3-1 QT Designer視窗中4個紅字標註區域。 區域1是元件盒,裡面提供很多的元件控制項,每個項目的功能不同
,例如常用到的按鈕(Push Button)、單選紐(Radio Button)、及 標籤(Label)
、文字方塊(TextEdit)等,可以直接拖放到區域2主視窗中擺放,在區域3物件
指示器(Object Inspector)中可索引切換擺放在主視窗中不同的元件,利用屬性編輯器(Property Editor)對選中的元件編輯如寬度、高度、佈局、字型等屬性。 區域4是信號/信號槽編輯器,這是PyQt5非常重要的核心機制,當按紐按下後就會發射一個信號(signal),信號槽(slot)接收到這個對應的信號後就會處理這個事件。 Qt Designer 這一個視覺化的GUI設計工具,對程式設計師來說真的是一大福音,便利了許多, 有一點要提想讀者的是PyQt5在GPL協議是可以完全免費使用,但如果不打算開源準備應用於商業活動還是得付費。當然啦,熟悉了Designer UI設計後,一大票相似免費軟體等著你,不怕被綁架! 如果讀者想更深入了解Qt5及程式設計,可至Qt官網下載資料好好研究。
Qt 官網 : https://www.qt.io/download-qt-installer 3. 3 使用QT Designer 設計一個UI介面 步驟 1. 點擊下拉選單[檔案]新增一個新表單(圖3-2)。 圖 3-2 新建一個新表單。 步驟2. 選Widget 表單(圖3-3)。 圖 3-3 Widget表單。 步驟3. 拖放元件到表單(圖3-4)。 從元件盒拖放一個Label 及Push Button 到表單(Form)上(圖 3-4)。 可在物件指示器及屬性編輯器上修改元件名稱、屬性。 在此為了簡化問題,我就維持不變,讀者熟悉後可自已動手試試。 圖 3-4 設計表單。 步驟4. 編輯信號與信號槽。 要讓按鈕按下有作用,還需要將信號和槽關聯起來, 如圖3-5點擊工具列[編輯信號與信號槽] 圖 3-5 編輯信號與信號槽 步驟5. 關聯信號與信號槽。 滑鼠游標移到表單(Form)的元件按鈕(PushButton)處,左鍵按著不放移動到
表單可看到一個接地線,之後放開左鍵會彈跳出一個設定連線的視窗(圖3-6)。 圖3-6 關聯信號與信號槽 步驟6. 編輯信號槽事件函數。 選定 pushButton 發射信號是clicked(),之後點擊右邊Form下的編輯按鈕 (圖3-7)和(圖3-8)。 圖3-7 pushButton -> clicked() 步驟7. 新增信號槽事件函數。 按+新增一個自訂pushButton_click()事件函數()(圖3-8), 按OK鍵離開。 圖3-8 編輯信號槽 步驟8. UI設計完成。 自動跳回主視窗後可看到自建的UI成形了,不要忘記存檔,例如檔名myUI.ui (副檔名ui),要增加或修正UI也可開啟舊檔編輯,不需要從無到有再搞一 次,是不是挺方便的。 圖3-9 UI 步驟9. ui轉檔py。 Qt Designer 儲存的是.ui檔,結構類似XML格式,因為我們期望是要給Python引用,所以我們必須想辦法將.ui檔轉換成.py檔才行。 PyQt5提供一個命令列工具pyuic5可以很輕鬆地完成轉換工作,使用方式如下 :
pyuic5 source.ui -o destination.py 其中
-o : 是輸出参数,表示要產生一個文件 destination.py : 要產生.py格式的文件 source.ui : 由Qt Designer設計UI的.ui原始文件 舉個例子, 假設你設計出來的UI檔名是 myUI.ui,想轉檔成myUI.py格式
可以照著圖3-10這樣做,在相同路徑下會自動產生myUI.py檔。 如果你常用pyuic5,且對Python語法熟悉的話,建議可自已寫個簡單腳本,將上述命令列改成自動化執行,這個就留給讀者自已練習了。 圖3-10 透過pyuic5將.ui 轉換成.py 上述步驟雖多其實並不複雜,讀者還是要實際操作一次才會真正了解其中的奧義,UI美不美觀端看個人造詣,但設計的方法都是一樣的,多練習了。 緊接著下個單元會舉一個實例說明Python引用myUI.py的方法。 3. 4 Python 引用UI介面 新建一個程式碼myApp.py並繼承介面檔(myUI)的Ui_Form類別即可(打開
myUI.py 檔就可看到類別class Ui_Form)。 其中myUI.py介面檔必須放在myApp相同資料夾內,否則會錯誤。 程式碼執行如圖3-11,按一下PushButton會show出 "Hi this is my first
coding !!!",結果正如預期完全正確。myApp.py可當作一個樣板程式,讀者可慢慢擴增一些新功能,建議每加入一個功能最好就執行一次,沒問題了再增加,以免欲速則不達,將來花更多的時間debug,會抓到瘋,畢竟最複雜的程式也是從最基本的一磚一瓦造出來的,除非讀者寫程式功力深厚以及擁有的程式庫經過多年考驗沒問題,否則還是聽我的準沒錯。 myApp.py程式碼如下: - - coding: utf-8 - - import sys from PyQt5.QtWidgets import QMainWindow, Qapplication from myUI import Ui_Form #------------------------------------------------------------------------------ class MyWindow(QMainWindow, Ui_Form): def init (self, parent=None): super(MyWindow, self). init (parent) self.setupUi(self) #------------------------------------------------------------------------- def pushButton_click(self): self.label.setText("Hi this is my first coding !!!") #------------------------------------------------------------------------------ def main(): app = QApplication(sys.argv) myWin = MyWindow() myWin.show() sys.exit(app.exec_()) if name == ' main ': main() 圖3-11 myApp 程式碼及執行結果

陳必凱
2019-11-27 15:40:03

曾彥禮
2019-11-27 16:24:58

曾希哲
2019-11-27 19:40:06

有designer 寫起來跟Visual basic 一樣方便

林志強
2019-11-27 22:08:29

周英男
2019-11-27 23:22:18

好想學


原文網址 石小川
2019-11-26 10:25:02

有蠻多朋友問我一個問題 - 學完Python程式之後就不知要幹嘛? 在此我提出我的看法, 看是否對初學者有幫助。

程式語言重要但只是一個輔助工具而已、就像英文一樣,不要模糊了主軸,最重要的還是人,建議找一個專題投入你的想像力和創造力, 程式功力自然提升,到時就可理解Python除了可做AI專家系統推論機、解藥廠化學式、高能物理學方程式外,還可做到雷達\聲納訊號分析或控制機器人....等等。與此跟大家共勉之。

後續會提出一些軟/硬體專題提供大家參考,希望有興趣的朋友將Python + PyQt5基礎先預習一下跟上腳步,以後軟硬體都會用Python + PyQt5來實作。

圖中操作面板就是以PyQt5實作UI介面。

p.s. 這幾天會將以前散布在各個社團的舊文章及程式整合起來以方便查閱,歡迎沒看過的朋友閱覽

陳必凱
2019-11-26 10:49:05

Grass Lin
2019-11-26 12:21:37

Grass Lin
2019-11-26 12:21:46

感謝分享

侯凱亮
2019-11-26 15:08:41

感恩!


 

全不選 發文排行