安裝 PyQt

  1. 1. 安裝 PyQt
  2. 2. 安裝 Pyqt5-tools
  3. 3. PyQt 的 ui 檔轉換
  4. 4. 在 QT design 中觀看 ui 預覽
  5. 5. LineEdit 與 TextEdit 的差異
  6. 6. 什麼是 Spacer
  7. 7. 建立一個事件
  8. 8. 使用 keypass event
  9. 9. 關掉 QTextEdit 的 Scoll
  10. 10. 設定 dialog title
  11. 11. Combobox 中的下拉式 item 加長

安裝 PyQt

PyQT 為 python 的一款 GUI 程式, 是採用 GPL licence, 但也是不是每一版都有 windows 安裝版
注意: 這邊可能會更推薦使用 pip 安裝, 指令為

pip install pyqt5

pip 會自動根據 python 的版本自動匹配, 我這邊使用 python 3.6.5 批配到的是 pyqt 5.10.1

雖然 PyQt 可以自行從官網下載並安裝, 但請務必使用 pip 安裝, 後面使用的時候問題會比較少

安裝 Pyqt5-tools

使用 pip 安裝 PyQt 時, 並不會把 Pyqt designr 給安裝起來, 所以使用 pip 安裝 Pyqt5-tools, 以便取得 QT designer

pip install pyqt5-tools

而 designer 會在

D:\Python\Python36-32\Lib\site-packages\pyqt5-tools

中找到

PyQt 的 ui 檔轉換

安裝好 pyqt5 後, 可以使用 qt design 來設計 UI, 把 UI 設計好了之後存檔, 會產生 .ui檔 接下來要使用此ui 檔, 我們必須把此 ui 檔案轉換成 .py檔,方便我們直接在 Python 中使用, 使用 CMD 切換到設計好的 ui 所在目錄下,執行此指令(ui檔我們取名為 myui.ui)

pyuic5 myui.ui -o myui.py

而 pyuic5 路徑如下( python 安裝路徑為 D:\Python36-32 為例)

D:\Python36-32\Scripts\pyuic5.exe

接下來把以下文字存成'PyGui.py'

import sys
from PyQt5.QtWidgets import QApplication, QDialog, QMessageBox
from myui import Ui_Dialog
class MyDlg(QDialog):
    def __init__(self):
        super(MyDlg, self).__init__()

        # Set up the user interface from Designer.
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

def main_start():
    app = QApplication(sys.argv)
    window = MyDlg()
    window.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main_start()

再執行以下指令即可

python PyGui.py 

ref:

http://pyqt.sourceforge.net/Docs/PyQt5/designer.html

在 QT design 中觀看 ui 預覽

  • 表單/預覽,
  • 或是 Ctrl+R

LineEdit 與 TextEdit 的差異

lineEdit: 單行的 edit TextEdit: 多行

什麼是 Spacer

是當使用 vertical layout 時, 若中間不想放東西的時候用來填空的 Horizontal Spacer 水平空白条和 Vertical Spacer 垂直空白条,空白条的作用就是填充无用的空隙,如果不希望看到控件拉伸后变丑,就可以塞一个空白条到布局器里面 https://qtguide.ustclug.org/

建立一個事件

class MyDlg(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.btnRefresh.clicked.connect(self.chk_fun)

    def chk_fun(self):
        print("Good.")

直接在 MyDlg 中的 __init__ 中加入事件, 並綁定到某個 function 就可以了, 例如這邊看到的是一個叫btnRefresh 的button, 我們把這個 button 的 clicked 的事件, 綁訂到 chk_fun 這個 function , 而這個 function 印出 good

再舉一個例子, 如 combobox 的 index change 綁定事件如下

myCombobox.currentIndexChanged.connect(self.cmd_idx_change)

使用 keypass event

只要在該 Qdlog 中, 複寫 def keyPressEvent(self, event): 即可, 如下所示

def keyPressEvent(self, event):
    key = event.key()
    print(key)
    super(MyDlg, self).keyPressEvent(event)

要注意的是, 如果現在 focus 的控鍵上有 keypassevent 的話, 會優先呼叫該控鍵的 event, 例如 txtedit 有自己的 page down , 所以 dialog 的不會對他造成影響

關掉 QTextEdit 的 Scoll

找到 verticalScrollBarPolicy , 並且把她設成 off 即可

設定 dialog title

self.setWindowTitle

Combobox 中的下拉式 item 加長

有個屬性叫visiable item cnt的數字選大一點