--使用PyQt套件
#原文出處
#摘要紀錄與說明
--PyQt5 是基於Qt5而來
--請直接下載檔案執行。如果是複製網頁上的程式,貼上後請注意縮排問題。
--程式碼的說明,就在程式裡。
#測試小部件
- 建立虛擬環境 python -m venv myenv
- 安裝 pip install pyqt5
#第一個視窗hello world(ex1.py)
- import sys #只是為了使用在釋放程式的記憶體
- from PyQt5.QtWidgets import QApplication #qt的應用程式
- from PyQt5.QtWidgets import QLabel #qt的Label
- from PyQt5.QtWidgets import QWidget #qt的總部件,就是這個程式的視窗
- app = QApplication(sys.argv) #建立主程式的實體 app ,參數是一個list,如果不需要sys.argv,可以改成[]
- #以下一一建立程式中的顯示部件
- window = QWidget() #建立視窗實體
- window.setWindowTitle('PyQt5 App') #視窗的抬頭
- window.setGeometry(200, 200, 280, 80) #視窗的位置和大小(x,y,長,寬)
- #window.move(60, 15) #重新將視窗移到電腦螢幕的(60,15)位置
- helloMsg = QLabel('<h1>Hello World!</h1>', parent=window) #建立標籤實體,qt5接受html標籤
- helloMsg.move(60, 15) #標籤移到視窗中的某位置
- window.show() #將視窗設定為顯示
- sys.exit(app.exec()) #開始執行應用程式,並在結束後,釋放記憶體。如果是python2,要用app.exec_()。
p.s.載入要花一點時間,結果視窗關閉後,才能再回到命令列視窗。
#建立基本概念
- Widgets:各種部件
- Layout managers:排列部件的方式
- Dialogs:對話視窗
- Main windows:主視窗
- Applications:程式
- Event loops:監聽事件
- Signals and slots:事件發出的訊號(signals)和對應的處理程式(slots)。
1. 各種部件
- Buttons:按鈕
- Labels:多行文字
- Line edits:單行文字
- Combo boxes:下拉列表
- Radio buttons:單選按鈕
......
2. 排列部件方式
特性:
對話視窗有2個內定的按鈕,「ok」、「cancel」。
有model 和 modeless 二種,model要用建class。
model 要用.exec()呼叫,modeless則是用.show()
特性:
內定有功能列、工具列、狀態列等等的排列部件
一定要有中央部件,才有內容嘛
可以開出對話視窗來完成特定功能
5. 程式
在這裡,運用的是MVC架構,程式就是Control。它從view監聽接收資料,轉到model去,model做好資料的運算,再藉由Control,送到view顯示。
6. 監聽事件
一個無限的迴圈,時時看看有沒有哪個部件發出訊號了。就是.exec()的運作。
註:python2 使用.exec_(),python3 使用.exec()和.exec_()都可以。(因為python2自己內部有.exec())
訊號,如滑鼠按鍵或鍵盤被按下等等,代表某一個部件狀態改變了,需要處理程式來做出必要的處置。
它們之間的機制有
一個訊號,發給一個或多個處理程式。
一個訊號,連結到另外一個訊號。
一個處理程式,處理多個訊號。
python程式寫法,widget.signal.connect(slot_function)
ex7.py 中的程式,btn.clicked.connect(greeting) 當按鈕按下去(click),就執行greeting程式。
程式需要傳遞參數時,
在程式定義的部份,如同一般函數,將參數寫在( )內,使用在字串之內時,用{ }。
在程式呼叫的部份,要使用functools.partial來間接呼叫。btn.clicked.connect(functools.partial(greeting,"world"))
p.s.使用functools,要先import functools。
請見 ex9.py
沒有留言:
張貼留言