QComboBox 下拉选单
QComboBox 是 PyQt6 里的下拉选单元件,这篇教学会介绍如何在 PyQt6 视窗里加入 QComboBox 下拉选单,并实作修改选单内容以及点读取选项等基本应用。
快速导览:
因为 Google Colab 不支援 PyQt6,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
加入 QComboBox 下拉选单
建立 PyQt6 视窗对象后,透过 QtWidgets.QComboBox(widget) 方法,就能在指定的元件中建立下拉选单,接着使用 addItems() 方法加入选单项目,下方的程序码执行后,会在视窗里加入一个有四个项目的下拉选单。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
box = QtWidgets.QComboBox(Form) # 加入下拉選單
box.addItems(['A','B','C','D']) # 加入四個選項
box.setGeometry(10,10,200,30)
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.box = QtWidgets.QComboBox(self) # 加入下拉選單
self.box.addItems(['A','B','C','D']) # 加入四個選項
self.box.setGeometry(10,10,200,30)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
QComboBox 默认选项
有两种方法可以设定默认选项,使用第一种 setCurrentIndex(index) 方法,可以透过选项的编号指定默认选项,使用第二种 setCurrentText(str) 方法,如果选项的文字为 str 则会指定为默认选项,否则则以第一个选项为主,下方的程序码执行后,如果选项里有 D 则默认 D,否则是 B ( 执行上一段程序码 setCurrentIndex 的结果 )。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
box = QtWidgets.QComboBox(Form)
box.addItems(['A','B','C','D'])
box.setGeometry(10,10,200,30)
box.setCurrentIndex(1) # 預先顯示第二個選項 ( 第一個為 0 )
box.setCurrentText('D') # 如果選項文字為 D,則顯示 D
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.box = QtWidgets.QComboBox(self)
self.box.addItems(['A','B','C','D'])
self.box.setGeometry(10,10,200,30)
self.box.setCurrentIndex(1) # 預先顯示第二個選項 ( 第一個為 0 )
self.box.setCurrentText('D') # 如果選項文字為 D,則顯示 D
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
QComboBox 添加、删除选项
透过 addItem(str) 方法可以在最后方添加选项,insertItem(index, str) 方法可以在指定的位置添加选项,removeItem(index) 方法可以删除指定位置的选项,下方的程序码执行后,选单会变成 ok、A、B、D、apple。
from PyQt6 import QtWidgets, QtGui, QtCore
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
box = QtWidgets.QComboBox(Form)
box.addItems(['A','B','C','D'])
box.setGeometry(10,10,200,30)
box.addItem('apple') # 在最後方添加 apple 選項
box.removeItem(2) # 移除第三個選項 C
box.insertItem(0, 'ok') # 在最前方加入 ok 為第一個選項
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.box = QtWidgets.QComboBox(self)
self.box.addItems(['A','B','C','D'])
self.box.setGeometry(10,10,200,30)
self.box.addItem('apple') # 在最後方添加 apple 選項
self.box.removeItem(2) # 移除第三個選項 C
self.box.insertItem(0, 'ok') # 在最前方加入 ok 為第一個選項
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
QComboBox 常用方法
下方列出 QComboBox 的常用方法:
| 方法 | 参数 | 说明 |
|---|---|---|
| addItem() | str | 从最后方增加单一个项目。 |
| addItems() | list | 以串列方式增加多个项目。 |
| insertItem() | index, str | 从指定位置添加项目。 |
| insertItems() | index, list | 以串列的方式,在指定位置添加多个项目。 |
| removeItem() | index | 移除指定项目。 |
| setDisabled() | bool | 设定是否禁用,默认 False。 |
| currentIndexChanged.connect() | fn | 选项改变时要执行的函数。 |
| currentText() | 选择项目的文字。 | |
| currentIndex() | 选择项目的索引值。 | |
| setItemIcon() | index, icon | 设定指定选项的 icon,icon 使用 QtGui.QIcon(图片路径)。 |
下方的程序码执行后,会运用 setItemIcon()方法,替四个选项都加上 icon 图示。
from PyQt6 import QtWidgets, QtGui
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
box = QtWidgets.QComboBox(Form)
box.addItems(['A','B','C','D'])
box.setGeometry(10,10,200,30)
box.setItemIcon(0, QtGui.QIcon('icon.png'))
box.setItemIcon(1, QtGui.QIcon('mona.jpg'))
box.setItemIcon(2, QtGui.QIcon('orange.jpg'))
box.setItemIcon(3, QtGui.QIcon('ok.png'))
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets, QtGui
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.box = QtWidgets.QComboBox(self)
self.box.addItems(['A','B','C','D'])
self.box.setGeometry(10,10,200,30)
self.box.setItemIcon(0, QtGui.QIcon('icon.png'))
self.box.setItemIcon(1, QtGui.QIcon('mona.jpg'))
self.box.setItemIcon(2, QtGui.QIcon('orange.jpg'))
self.box.setItemIcon(3, QtGui.QIcon('ok.png'))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
显示 QComboBox 选择项目
运用 currentIndexChanged.connect(fn) 方法,就能在点击项目时,执行特定的函数,下方的程序码执行后,会透过 QLabel 显示选择的项目内容。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
label = QtWidgets.QLabel(Form)
label.setGeometry(10,10,200,30)
def show():
text = box.currentText()
num = box.currentIndex()
label.setText(f'{num}:{text}')
box = QtWidgets.QComboBox(Form)
box.addItems(['A','B','C','D'])
box.setGeometry(10,50,200,30)
box.currentIndexChanged.connect(show)
Form.show()
sys.exit(app.exec())
class 写法 ( 注意不能使用 show 作为方法名称,会覆写基底的 show 方法造成无法显示 ):
from PyQt6 import QtWidgets, QtGui
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(10,10,200,30)
self.box = QtWidgets.QComboBox(self)
self.box.addItems(['A','B','C','D'])
self.box.setGeometry(10,50,200,30)
self.box.currentIndexChanged.connect(self.showText)
def showText(self):
text = self.box.currentText()
num = self.box.currentIndex()
self.label.setText(f'{num}:{text}')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
微信扫码关注
抖音扫码关注