搜尋此網誌

2017年9月1日 星期五

PyQt5 教學 Part 5: Qt Designer 製作GUI介面

前幾章有教部分的GUI物件如何產生出來,但是在大型的程式裡物件非常的多,一個一個新增可能會很混亂,因此Qt也有提供程式專門製作物件的GUI。

在官方下載 Qt 之後預設有含 Designer程式。
本章著重在於存檔完後的.ui檔如何使用,因此不會太詳細描述每個物件。

1. 建立主視窗

一個程式會有主要的視窗作為進入點,所以記得一開始需要的是
Main Window的物件

建立視窗

2.擺放物件

將物件直接拖曳到視窗上,以先放Layout再放物件,
則可以讓物件自動去排列。
Main Window

3.物件的事件觸發

  1. 在物件盒上選擇編輯事件與信號槽
    1

  2. 在視窗上將物件的信號拖曳到Main Window,如圖
    2

  3. 選取事件種類,左邊為觸發的事件,以按鈕為例通常為clicked(),右邊則是點選編輯或是選擇要觸發的事件
    3

  4. 點選編輯時會出現下圖,需要新增的是信號槽(slot),新增完畢後即可選取slot
    4

4.如何使用存檔後的ui文件

我們會需要將ui的的格式檔案轉換成.py。
使用以下指令

python -m PyQt5.uic.pyuic [input.ui] -o [output.py]

轉換後的py檔我通常不會去編輯,而是利用編寫其他py檔去繼承自動產生的檔案。

新檔案的開頭如下

from PyQt5.QtWidgets import QMainWindow
import MainWindow


class Main(QMainWindow, MainWindow.Ui_MainWindow):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setupUi(self)

MainWindow是我將ui檔轉換成.py,
因此繼承了 QMainWindow以及 ui的window後,透過這個方式就可以專心的寫程式不需要事前寫很多的UI程式碼。

5.別忘了進入主程序

import sys
from PyQt5.QtWidgets import QApplication

......

if __name__ == "__main__":
    app = QApplication(sys.argv)
    MainWindow = Main()
    MainWindow.show()
    sys.exit(app.exec_())

6.事件也別忘了

第三步驟有自行新增信號槽(slot),因此也必須補上function,例如我信號槽的名稱是 click_button

class Main(QMainWindow, MainWindow.Ui_MainWindow):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setupUi(self)

    def click_button(self):
        # do_something

以上是Designer的教學,我自己是更常使用這種方式來製作 Qt的程式。


如果有任何疑問或指教,歡迎底下回覆,謝謝。

PyQt5 教學 Part 4: 執行緒的使用

2017年3月27日 星期一

PyQt5部署與編譯 pyqtdeploy-程式設定

此文章因為內容較長,因此拆成兩篇文章
1. 環境安裝
2. 程式設定
需要做的事情
環境安裝:
1. 安裝pyqtdeploy
2. 下載Qt、Python、sip、PyQt5的source code
3. 建立存放靜態程式碼的資料夾
4. 編譯下載的檔案(由pyqtdeploycli設定)

程式設定:
5. 開始製作 prc 檔案(由pyqtdeploy建立)
6. 製作qmake檔案
7. 最後程式的編譯
在過程中,可能會遇到非常多的錯誤,歡迎發問一起解決。

PyQt5 部署與編譯pyqtdeploy-環境安裝

此文章因為內容較長,將會拆成兩篇文章
1. 環境安裝
2. 程式設定
在這篇文章裡,要介紹的是如何讓寫好的Qt應用程式能夠讓其他人使用,
並且是在Client盡量不需要安裝其他環境的情況下。

簡單的方法可以參考 Python 使用 PyInstaller 打包程式
這個會自動抓取所有用到的動態函式庫,並且採用動態連結的方式執行。

在這篇我們要教另一個方法 pyqtdeploy
他會將Python 與 Qt的程式碼轉成C++的程式碼,採用靜態的方式編譯所有程式。好處在於除了執行速度之外,甚至可以編譯成 iOS 或 Android 的程式。

因此最重要的一點就是所有的程式都必須要有靜態的原始碼

2017年2月28日 星期二

PyQt5 教學 Part 4: 執行緒的使用

在前一章我們學習到如何觸發事件,
但是在撰寫視窗的程式時,我們常常會需要一次能夠執行很多不同的功能,
例如我們需要製作一個定期任務,每隔一秒就必須把資訊傳回到主視窗。

接著開始介紹如何使用多執行緒,
依照慣例先去教學文件裡面,尋找可以使用的資源。
Qthread的文件

2017年1月7日 星期六

PyQt5 教學 Part 3: 信號觸發

接著會介紹怎麼讓一個按鈕可以作動
首先我們先去教學文件裡面,尋找按鈕可以使用的Signal(信號)
QPushButton的文件
我們可以根據以下的文字發現總共有9個 signals 可以使用

Additional Inherited Members

4 signals inherited from QAbstractButton
3 signals inherited from QWidget
2 signals inherited from QObject

而其中點擊相關的信號都在 QAbstractButton

2016年12月12日 星期一

PyQt5 教學 Part 2: Layout排版系統

此篇是介紹物件的擺放方式,物件要擺放在視窗上面總共有兩個方式
分別是用自動排版跟設定座標的方式

這個要介紹的就是Layout自動排版

自動排版有四種排版方法
  • QHBoxLayout:水平排版
  • QVBoxLayout:垂直排版
  • QGridLayout:格線排版
  • QFormLayout:表格排版

2016年12月11日 星期日

PyQt5 教學 Part 1: 安裝與開始

最近開始嘗試接觸Qt,但是網路上中文教學還是以Qt4為主要,
在這系列的教學裡面,如果有不太清楚的地方,歡迎互相交流。
如果覺得有想補充的地方也歡迎回覆給我,畢竟我也是才剛起步而已。

另外在大部分的程式,我會採用物件導向的方式,
如果不懂的地方也歡迎回覆發問。