Python PyQt5 QCheckBox 複選框用法與範例

本篇 ShengYu 將介紹 Python PyQt5 QCheckBox 複選框用法與範例,CheckBox 可以作一些多選項的確認功能,例如代辦清單這種應用。

以下的 Python PyQt5 QCheckBox 用法與範例將分為這幾部分,

  • PyQt5 QCheckBox 基本用法
  • PyQt5 設定 QCheckBox 預設的選項
  • PyQt5 QCheckBox 綁定事件

PyQt5 QCheckBox 基本用法

PyQt5 簡單建立 QCheckBox 的用法如下,在建構 QCheckBox 的同時帶入複選框的顯示文字,之後使用 move 移動到想要顯示的座標上,

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

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

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

self.checkbox = QCheckBox('PyQt5', self)
self.checkbox.move(60, 50)

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

結果圖如下,

這邊示範建立多個 QCheckBox,並且不使用 move 手動排版的方式,而是透過放入 QVBoxLayout 來進行排版,

python-pyqt-qcheckbox2.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, 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)
layout.addWidget(self.checkbox2)

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

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

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

結果圖如下,

PyQt5 設定 QCheckBox 預設的選項

這邊介紹 PyQt5 設定 QCheckBox 預設的選項,建立 QCheckBox 後預設是不勾選的狀態,有兩種方式可以改變這個狀態,
一個是使用 QCheckBox.toggle(),toggle 就是原本勾選的會變成不勾選,在使用一次 toggle 的話原本不勾選的會變成勾選,
另一個方式是透過 QCheckBox.setChecked() 來設定 CheckBox 是否要勾選,True 為 勾選,False 為不勾選,

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 綁定事件可以用 QCheckBox.clicked.connect(),或者是 QCheckBox.stateChanged.connect() 這兩種信號,將信號綁訂到對應處理的函式,這邊示範 QCheckBox.clicked.connect() 信號綁訂,

而在處理函式裡可以使用 QCheckBox.isChecked() 來判斷該 CheckBox 是否被 check 了,

python-pyqt-qcheckbox4.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/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)
self.checkbox1.clicked.connect(self.onCheckBox1Click)
layout.addWidget(self.checkbox1)

self.checkbox2 = QCheckBox('banana', self)
self.checkbox2.clicked.connect(self.onCheckBox2Click)
layout.addWidget(self.checkbox2)

self.checkbox3 = QCheckBox('orange', self)
self.checkbox3.clicked.connect(self.onCheckBox3Click)
layout.addWidget(self.checkbox3)

self.checkbox4 = QCheckBox('tomato', self)
self.checkbox4.clicked.connect(self.onCheckBox4Click)
layout.addWidget(self.checkbox4)

def onCheckBox1Click(self):
if self.checkbox1.isChecked():
print('apple is checked')
else:
print('apple is unchecked')

def onCheckBox2Click(self):
if self.checkbox2.isChecked():
print('banana is checked')
else:
print('banana is unchecked')

def onCheckBox3Click(self):
if self.checkbox3.isChecked():
print('orange is checked')
else:
print('orange is unchecked')

def onCheckBox4Click(self):
if self.checkbox4.isChecked():
print('tomato is checked')
else:
print('tomato is unchecked')

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

當然你也可以這幾個 CheckBox 全部綁訂同一個事件處理函式,而在 onCheckBoxClick() 處理函式裡透過 self.sender() 的方式可以取得是哪一個 CheckBox,範例如下,

python-pyqt-qcheckbox5.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
38
39
40
41
42
43
44
45
46
#!/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)
self.checkbox1.clicked.connect(self.onCheckBoxClick)
layout.addWidget(self.checkbox1)

self.checkbox2 = QCheckBox('banana', self)
self.checkbox2.clicked.connect(self.onCheckBoxClick)
layout.addWidget(self.checkbox2)

self.checkbox3 = QCheckBox('orange', self)
self.checkbox3.clicked.connect(self.onCheckBoxClick)
layout.addWidget(self.checkbox3)

self.checkbox4 = QCheckBox('tomato', self)
self.checkbox4.clicked.connect(self.onCheckBoxClick)
layout.addWidget(self.checkbox4)

def onCheckBoxClick(self):
checkbox = self.sender()
#print(checkbox)
if checkbox.isChecked():
print(checkbox.text() + ' is checked')
else:
print(checkbox.text() + ' is unchecked')

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

以上就是 Python PyQt5 QCheckBox 複選框用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Python 新手入門教學懶人包
Python PyQt5 新手入門教學