1、输入控件:纯键盘文本输入、步长调节器、组合框。
组合框:默认展示最小的空间给用户进行操作、右侧会有一个下拉菜单操作。
组合框:(组合控件,由多个子控件组成)
用户数据并不会被显示出来(开发人员可以获取到的),仅仅是显示出一个图标或者字符串文本。
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)
# 逐个添加内容,也可添加ICon
cb.addItem("xxx1")
cb.addItem("xxx2")
# 一次性添加几条内容,元组或者列表的形式都可以
cb.addItems(("1", "2", "3"))
# 指定位置插入内容,该索引位置添加条目
cb.insertItem(1, "qqq")
#cb.setItemIcon(2, QIcon("xxx.png"))
# 设置条目的图标、文本等
cb.setItemText(2, "社会")
# 删除条目项
cb.removeItem(2)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
window.show()
sys.exit(app.exec_())
插分割线:
设置展示的默认值: setCurrentIndex(2)
cb.setCurrentText("itlike");匹配不到已有的字符串,则显示默认值。
设置编辑文本:将该控件设置为可被编辑:cd.setEditable(True).
设置当前的编辑文本(将原来的条目内容改变):cd.setEditText("itlike")
2、模型的操作、视图的操作 :
点击下拉列表展示表格或者柱形结构等(则需要特定的控件和特定的模型)
展示树形结构:模型中放很多条目、通过设计条目之间的父子关系就可以完成树状结构。
下拉列表的界面不支持树形结构,需要换一个视图。
def setup_ui(self):
cb = QComboBox(self)
print(QAbstractItemModel.__subclasses__())
cb.resize(100, 30)
# 创建模型
model = QStandardItemModel()
# 设置条目
item1 = QStandardItem("item1")
item2 = QStandardItem("item2")
item22 = QStandardItem("item22")
# 将一级item加入模型
item2.appendRow(item22)
model.appendRow(item1)
model.appendRow(item2)
# 将模型设置到控件中
cb.setModel(model)
# 换成树状视图显示
cb.setView(QTreeView(cb))
3、数据的获取操作:
某一个item附加额外数据做额外处理。
def setup_ui(self):
cb = QComboBox(self)
cb.addItems(["abc", "123", "456"])
cb.addItem("src", {"name": "itlike"})
btn = QPushButton(self)
btn.move(100, 100)
btn.setText("测试按钮")
# 获取条目总数
btn.clicked.connect(lambda: print(cb.count()))
# 获取当前索引
btn.clicked.connect(lambda: print(cb.currentIndex()))
# 获取当前数据,{"name": "itlike"},例如城市编码,作为附加数据不会被展示
btn.clicked.connect(lambda: print(cb.currentData()))
# 获取当前文本内容
btn.clicked.connect(lambda: print(cb.currentText()))
# 获取当前图标
btn.clicked.connect(lambda: print(cb.itemIcon(cb.currentIndex())))
# 给按钮设置图标
btn.clicked.connect(lambda: btn.setIcon(cb.itemIcon(cb.currentIndex())))
# 获取最后一个条目的信息
# idx=默认值,不传递形参的情况下才会取默认值,clicked像外界传递一个布尔类型的参数,
btn.clicked.connect(lambda _, idx=cb.count()-1: print(cb.itemIcon(idx), cb.itemText(idx),
cb.itemData(idx)))
# 给按钮设置图标
btn.clicked.connect(lambda: btn.setIcon(cb.itemIcon(cb.currentIndex())))
4、数据的限制:限制存放最大条目个数、以及可以被展示的最大条目个数。
def setup_ui(self):
cb = QComboBox(self)
cb.addItems(["abc", "123", "456"])
cb.addItem("src", {"name": "itlike"})
btn = QPushButton(self)
btn.move(100, 100)
btn.setText("测试按钮")
# 个数到达上限无法添加新的
btn.clicked.connect(lambda: cb.addItem("it"))
cb.setMaxCount(6)
cb.setEditable(True)
# 限制可见条目个数
cb.setMaxVisibleItems(3)