PyQt5 QComboBox 下拉框学习笔记,按代码一步步来
QComboBox 的构造函数是 QComboBox(parent: QWidget = None),应用到代码中如下:
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QComboBox 的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
cb = QComboBox(self)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
注意,代码中只有 cb = QComboBox(self) 这一句与生成下拉框有关,其余都是为了生成 Qt 界面窗口。之后我们只关注 QComboBox 相关代码即可。
运行后,窗口中出现一个空白的 QComboBox 下拉列表控件,后续我们可以通过操作数据的方法设置数据列表。
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QComboBox 的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
cb = QComboBox(self)
# 增加条目
cb.addItem("ted 1")
cb.addItem("ted 2")
cb.addItems([f"ted {i}" for i in range(3,11)])
# 设置条目
cb.setItemText(9,"ttteed 10")
# 插入分割线
cb.insertSeparator(9)
# 设置默认值
cb.setCurrentIndex(10)
# 按内容来匹配设置
#cb.setCurrentText("ttteed 10")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
下拉框数据获取常见方法:
我们通过添加一个测试按钮来获取下拉框数据并打印出来:
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QComboBox 的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
cb = QComboBox(self)
# 增加条目
cb.addItems([f"ted {i}" for i in range(1,11)])
# 添加个测试按钮来点击获取下拉框数据
btn = QPushButton(self)
btn.move(100,0)
btn.setText("测试按钮")
# 打印下拉框当前索引
btn.clicked.connect(lambda :print(cb.currentIndex()))
# 打印下拉框当前文本
btn.clicked.connect(lambda: print(cb.currentText()))
# 打印下拉框当前的附带数据
btn.clicked.connect(lambda: print(cb.currentData()))
# 打印下拉框总条目数
btn.clicked.connect(lambda: print(cb.count()))
# 获取并打印下拉框索引为8的条目文本
btn.clicked.connect(lambda: print("索引为8的条目文本:",cb.itemText(8)))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QComboBox 的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
cb = QComboBox(self)
# 设定最大条目个数
cb.setMaxCount(5)
# 设置最大显示个数
cb.setMaxVisibleItems(3)
# 设置下拉框为可编辑模式
cb.setEditable(True)
# 添加个测试按钮来点击增加下拉框条目
btn = QPushButton(self)
btn.move(100,0)
btn.setText("添加条目")
btn.clicked.connect(lambda :cb.addItem("ted"))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
注意,setMaxVisibleItems 设置需要将下拉框控件设置为可编辑模式。
是否允许有重复选项
下拉框黑色边框设置
清空所有选项代码展示:
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QComboBox 的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
cb = QComboBox(self)
# 添加个测试按钮来点击增加下拉框条目
btn = QPushButton(self)
btn.move(100,0)
btn.setText("添加条目")
btn.clicked.connect(lambda :cb.addItem("ted"))
# 添加按钮点击清空选项
btn_clear = QPushButton(self)
btn_clear.move(200,0)
btn_clear.setText("清空条目")
btn_clear.clicked.connect(cb.clear)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
通过按钮弹出下拉选项:
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QComboBox 的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
cb = QComboBox(self)
# 添加个测试按钮来点击增加下拉框条目
btn = QPushButton(self)
btn.move(100,0)
btn.setText("添加条目")
btn.clicked.connect(lambda :cb.addItem("ted"))
# 添加按钮点击清空选项
btn_clear = QPushButton(self)
btn_clear.move(200,0)
btn_clear.setText("清空条目")
btn_clear.clicked.connect(cb.clear)
# 添加按钮点击弹出选项
btn_pop = QPushButton(self)
btn_pop.move(300,0)
btn_pop.setText("弹出选项")
btn_pop.clicked.connect(cb.showPopup)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
在可编辑模式下,实现快速匹配的效果
必须是用户交互造成的值改变才会发射这个信号
既可以是由用户交互、也可以是由代码控制发生的改变
可编辑的条目
点开下拉菜单时,鼠标放到选项上便触发
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QComboBox 的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
cb = QComboBox(self)
cb.addItems([f"ted {i}" for i in range(1,11)])
cb.activated.connect(lambda x:print(f"条目索引 {x} 被激活"))
cb.activated[str].connect(lambda x: print(f"条目 {x} 被激活"))
cb.currentIndexChanged.connect(lambda x: print("当前索引发生改变",x))
cb.currentTextChanged.connect(lambda x: print("当前文本发生改变", x))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())