Python PyQt5 新手入門教學

本篇 Python PyQt5 視窗程式新手入門教學彙整了 ShengYu 過往學習 PyQt5 的知識,在此整理成 PyQt5 教學目錄以便日後的查詢與新手入門學習,在本篇 Python PyQt5 教學裡你可以快速地學習 PyQt5 GUI 圖形介面視窗程式設計。

以下 Python PyQt5 教學目錄將分為這幾部分,

  • Python PyQt5 基本視窗
  • Python PyQt5 QLabel 標籤
  • Python PyQt5 QPushButton 按鈕
  • Python PyQt5 QLineEdit 文字輸入框
  • Python PyQt5 QComboBox 下拉式選單
  • Python PyQt5 QRadioButton 單選框
  • Python PyQt5 QCheckBox 複選框
  • Python PyQt5 QMessageBox 訊息框

那我們開始吧!

Python PyQt5 基本視窗

在 Python 中要使用 PyQt5 需要先安裝 PyQt5 模組,使用 pip 安裝 PyQt5 模組的指令如下,

1
$ pip install PyQt5

確認有安裝 PyQt5 模組後,我們便可以開始來寫一個 PyQt5 基本視窗的程式了,以下我們示範建立一個 PyQt5 的基本視窗,一開始需要建立一個 PyQt5 應用程式所需要的 QApplication,QApplication 用來管理 Qt GUI 應用程式的控制流程與主要設定,之後建立一個 QWidget 的子類,如下例中 MyWidget 繼承 QWidget,不熟悉繼承的話可以參考 Python 繼承 inheritance 的用法這篇,在 MyWidget 的 initUI() 成員函式裡使用 setWindowTitle() 讓視窗名稱上顯示 hello world 字樣,使用 setGeometry() 將視窗設定在螢幕視窗座標位置 (50, 50) 上且視窗為 寬200x高150 的大小,之後使用 show() 便會將我們的視窗顯示出來,最後要使用 QApplication.exec_() 來進入 PyQt5 的主事件循環 (Event Loop),

python-pyqt-hello-world.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('hello world')
self.setGeometry(50, 50, 200, 150)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

下圖為 PyQt5 基本視窗的呈現結果,

延伸閱讀:Python 物件導向:繼承 inheritance 的用法
這樣我們就完成的一個基本的 PyQt5 視窗程式囉!接著我們就來學習一下 PyQt5 裡常見的 UI 元件吧!

Python PyQt5 QLabel 標籤

QLabel 標籤是很基本的 UI 元件,主要是用來顯示文字的,也常常用來跟其它 UI 元件搭配,以下為 Python PyQt5 QLabel 按鈕的範例程式,

python-pyqt-qlabel2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel)
from PyQt5.QtGui import QFont

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mylabel = QLabel('hello world', self)
self.mylabel.move(40, 50)
self.mylabel.setFont(QFont('Arial', 18))

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

下圖為 PyQt5 QLabel 標籤的呈現結果,

詳細的 PyQt5 QLabel 教學可以看 PyQt5 QLabel 標籤用法與範例 這篇。

Python PyQt5 QPushButton 按鈕

QPushButton 按鈕與按鈕事件是視窗程式設計的學習必學的 UI 元件,以下為 Python PyQt5 QPushButton 按鈕的範例程式,

python-pyqt-qpushbutton2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
self.mybutton.setText('hello wolrd')

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

下圖為 PyQt5 QPushButton 按鈕的呈現結果,

詳細的 PyQt5 QPushButton 教學可以看 PyQt5 QPushButton 按鈕用法與範例 這篇。

Python PyQt5 QLineEdit 文字輸入框

要取得使用者的輸入就需要使用 QLineEdit 文字輸入框這個 UI 元件,以下為 Python PyQt5 QLineEdit 按鈕的範例程式,

python-pyqt-qlineedit5.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLineEdit,
QLabel)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 240, 60)

gridlayout = QGridLayout()
self.setLayout(gridlayout)

self.mylabel = QLabel('Name:', self)
gridlayout.addWidget(self.mylabel, 0, 0)
self.mylineedit = QLineEdit(self)
gridlayout.addWidget(self.mylineedit, 0, 1)

self.mylabel2 = QLabel('Password:', self)
gridlayout.addWidget(self.mylabel2, 1, 0)
self.mylineedit2 = QLineEdit(self)
self.mylineedit2.setEchoMode(QLineEdit.Password)
gridlayout.addWidget(self.mylineedit2, 1, 1)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

下圖為 PyQt5 QLineEdit 文字輸入框的呈現結果,

詳細的 PyQt5 QLineEdit 教學可以看 PyQt5 QLineEdit 文字輸入框用法與範例 這篇。

Python PyQt5 QComboBox 下拉式選單

QComboBox 提供下拉式選單給使用者選取選項,跟 QListBox 相比 QComboBox 可以節省很多版面的空間,也讓使用者清楚知道目前的選取的項目,以下為 Python PyQt5 QComboBox 下拉式選單的範例程式,

python-pyqt-qcombobox2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QComboBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mycombobox = QComboBox(self)
self.mycombobox.addItems(['apple', 'banana', 'orange', 'lemon', 'tomato'])
self.mycombobox.setCurrentIndex(1)
#self.mycombobox.setCurrentText('banana')
self.mycombobox.move(60, 50)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

下圖為 PyQt5 QComboBox 下拉式選單的呈現結果,

詳細的 PyQt5 QComboBox 教學可以看 PyQt5 QComboBox 下拉式選單用法與範例 這篇。

Python PyQt5 QRadioButton 單選框

QRadioButton 單選框提供多選一的操作方式給使用者選取選項,以下為 Python PyQt5 QRadioButton 單選框的範例程式,

python-pyqt-qradiobutton.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout,
QRadioButton)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

layout = QVBoxLayout()
self.setLayout(layout)

self.myradiobutton1 = QRadioButton('apple', self)
layout.addWidget(self.myradiobutton1)
self.myradiobutton2 = QRadioButton('banana', self)
layout.addWidget(self.myradiobutton2)
self.myradiobutton3 = QRadioButton('orange', self)
layout.addWidget(self.myradiobutton3)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

下圖為 PyQt5 QRadioButton 單選框的呈現結果,

詳細的 PyQt5 QRadioButton 教學可以看 PyQt5 QRadioButton 單選框用法與範例 這篇。

Python PyQt5 QCheckBox 複選框

QCheckBox 複選框提供多選項選取的操作方式給使用者選取選項,以下為 Python PyQt5 QCheckBox 複選框的範例程式,

python-pyqt-qcheckbox3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QCheckBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

layout = QVBoxLayout()
self.setLayout(layout)

self.checkbox1 = QCheckBox('apple', self)
layout.addWidget(self.checkbox1)

self.checkbox2 = QCheckBox('banana', self)
self.checkbox2.toggle()
layout.addWidget(self.checkbox2)

self.checkbox3 = QCheckBox('orange', self)
self.checkbox3.setChecked(False)
layout.addWidget(self.checkbox3)

self.checkbox4 = QCheckBox('tomato', self)
self.checkbox4.setChecked(True)
layout.addWidget(self.checkbox4)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

下圖為 PyQt5 QCheckBox 複選框的呈現結果,

詳細的 PyQt5 QCheckBox 教學可以看 PyQt5 QCheckBox 複選框用法與範例 這篇。

Python PyQt5 QMessageBox 訊息框

QMessageBox 訊息框是蠻常見的 UI 元件,經常被使用來顯示提示訊息給使用者,以下為 Python PyQt5 QMessageBox 訊息框的範例程式,

python-pyqt-qmessagebox.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QMessageBox)

if __name__ == '__main__':
app = QApplication(sys.argv)
QMessageBox.information(None, 'my messagebox', 'hello world')

下圖為 PyQt5 QMessageBox 訊息框的呈現結果,

詳細的 QMessageBox 訊息框教學可以看 PyQt5 QMessageBox 用法與範例 這篇。

以上就是 Python PyQt5 新手入門教學介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!