Last Updated on 2023-05-28 by Clay
Qt Designer 是一個專用於 Python PyQt5 圖形化介面框架的輔助程式,簡單來說,就是有一個圖形化介面,輔助我們拉出自己想要的程式介面,十分方便好用。
在 Windows 和 Linux 中的安裝教學我都寫過,感覺也都比較單純,唯有 Mac OS 上一直聽說只能裝比較龐大的 Qt Creator,讓我有些望而卻步。
為什麼會這樣說呢?這是因為 Qt Creator 主要是給 C++ 中的 Qt 使用的工具,如果只是要寫 Python 版本的 PyQt,大可節省下這許多空間(幾十 GB 的樣子?),裝輕量版的 Qt Designer 即可。
安裝 Qt Designer
在 Mac OS 中,若要安裝 Qt Designer,可以透過以下網址:https://build-system.fman.io/qt-designer-download
下載之後,雙擊下載檔案便可安裝。但在執行 Qt Designer 時,多半會碰到以下問題導致無法開啟:
“Qt Designer” cannot be opened because the developer cannot be verified.
這似乎是沒有驗證所造成的問題,是否要使用還是要自己權衡一下。不過我個人是不會猶豫的!一來我確實需要 Qt Designer、二來這個下載網址的 Github 足足有近三千的 Star!
好,那以下開始講解如何強制開啟吧!
首先點擊右上角的蘋果圖示、選擇 System Preferences ... => Security & Privacy => General。
這時,應該會看到以下畫面:
選擇 Open Anyway。
這樣一來,就能正常啟動 Qt Designer 啦!不過各個元件居然分開的!這應該是正常的吧 XDDD (Linux、Windows 都是一體成型的)
安裝完成以後,再來跑個簡單的範例確認吧。
測試用範例程式
總之,先用 Qt Designer 隨便拉個介面,我就用以下這個隨便拉的介面測試:
然後我將它儲存下來,叫做 test.ui(Qt Designer 儲存的檔案都是 .ui 的格式)。
如果環境中沒有 PyQt5,記得使用以下指令安裝:
pip3 install pyqt5
接著,在剛才儲存 test.ui 檔案的資料夾中,使用終端機輸入以下指令:
python3 -m PyQt5.uic.pyuic test.ui -o test.py
這是使用 PyQt5 套件中的 PyUIC 將 .ui 格式的檔案轉換成 Python 可以執行的 .py 檔案。打開轉換好的 test.py,應該會看到以下程式:
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'test.ui' # # Created by: PyQt5 UI code generator 5.15.1 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(437, 334) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget) self.plainTextEdit.setGeometry(QtCore.QRect(20, 10, 401, 231)) self.plainTextEdit.setObjectName("plainTextEdit") self.textEdit = QtWidgets.QTextEdit(self.centralwidget) self.textEdit.setGeometry(QtCore.QRect(20, 250, 321, 31)) self.textEdit.setObjectName("textEdit") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(340, 240, 91, 51)) self.pushButton.setObjectName("pushButton") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 437, 22)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "Enter"))
然後再寫個檔案跑跑看(記得要匯入 test 這份程式):
# coding: utf-8 import sys from PyQt5.QtWidgets import * from test import Ui_MainWindow class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() sys.exit(app.exec_())
Output:
看起來跟我上面拉出來的圖一模一樣 XDDD
不過我真的成功啦!
References
- https://stackoverflow.com/questions/5044353/qt-designer-for-pyqt-on-osx-10-6
- https://github.com/hashicorp/terraform/issues/23033