访问组合框中项目的角色指的是获取组合框中每个项目中的数据,一般情况下是通过角色(Role)的方式来实现的。
在PyQt5中,使用QComboBox控件来创建组合框,每一个项目都可以通过角色来获取数据。常用的角色包括TextRole、DataRole、ToolTipRole等,可以通过model()函数获取到组合框的模型,进而通过index()函数获取每个项目对应的QModelIndex对象,最后通过data()函数获取对应角色的数据。
下面给出一个例子,为QComboBox控件添加项目,其中每个项目包含两个角色,“名称”和“值”。在下拉列表框中只显示名称,而在选中具体项目时,可获取该项目的值。
from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox
from PyQt5.QtCore import Qt
class ComboBoxExample(QMainWindow):
def __init__(self):
super().__init__()
# 建立QComboBox控件
self.combobox = QComboBox(self)
self.combobox.setGeometry(50, 50, 150, 30)
# 添加项目并设置角色数据
self.combobox.addItem("红色", {"Name": "红色", "Value": "#FF0000"})
self.combobox.addItem("绿色", {"Name": "绿色", "Value": "#00FF00"})
self.combobox.addItem("蓝色", {"Name": "蓝色", "Value": "#0000FF"})
# 仅显示“名称”角色数据
self.combobox.setModelColumn(0)
# 绑定信号槽函数
self.combobox.currentIndexChanged[str].connect(self.on_combobox_changed)
self.setGeometry(300, 300, 300, 200)
self.show()
def on_combobox_changed(self, text):
# 获取选中项目的值角色
index = self.combobox.currentIndex()
model = self.combobox.model()
data = model.index(index, 0).data(Qt.UserRole + 1)
print(data)
if __name__ == '__main__':
app = QApplication([])
ex = ComboBoxExample()
app.exec_()
上述示例代码中,建立了一个QComboBox控件,并在其中添加了三个项目,每个项目都包含“名称”和“值”两个角色的数据。在控件中仅显示了“名称”角色数据。当用户选择具体项目时,信号槽机制触发了on_combobox_changed()函数,在该函数中通过QComboBox的model()函数获取到了组合框模型,再通过index()函数获取当前选中项目的QModelIndex对象,并在该对象上调用data()函数获取该项目的“值”角色数据,并将其打印输出。
下面再给出一个示例,仍然是组合框和表格的联动,该示例中所列实现思路与上述示例基本相似。
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QComboBox, QTableWidget, QTableWidgetItem, QVBoxLayout, QHBoxLayout
from PyQt5.QtCore import Qt
class ComboBoxExample(QMainWindow):
def __init__(self):
super().__init__()
# 建立QComboBox控件
self.combobox = QComboBox(self)
# 添加项目并设置角色数据
self.combobox.addItem("红色", {"Name": "红色", "Value": "#FF0000"})
self.combobox.addItem("绿色", {"Name": "绿色", "Value": "#00FF00"})
self.combobox.addItem("蓝色", {"Name": "蓝色", "Value": "#0000FF"})
# 绑定信号槽函数
self.combobox.currentIndexChanged[str].connect(self.on_combobox_changed)
# 建立表格
self.tablewidget = QTableWidget(self)
self.tablewidget.setColumnCount(2)
# 建立主窗口布局
layout = QHBoxLayout()
layout.addWidget(self.combobox)
layout.addWidget(self.tablewidget)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
self.setGeometry(300, 300, 300, 200)
self.show()
def on_combobox_changed(self, text):
# 清空表格内容
self.tablewidget.setRowCount(0)
# 获取选中项目的值角色
index = self.combobox.currentIndex()
model = self.combobox.model()
data = model.index(index, 0).data(Qt.UserRole + 1)
if data:
# 添加行
self.tablewidget.setRowCount(1)
# 在表格中显示颜色名称和值
name_item = QTableWidgetItem(data['Name'])
self.tablewidget.setItem(0, 0, name_item)
value_item = QTableWidgetItem(data['Value'])
self.tablewidget.setItem(0, 1, value_item)
if __name__ == '__main__':
app = QApplication([])
ex = ComboBoxExample()
app.exec_()
上述示例代码中,在主窗口布局中,使用QHBoxLayout将QComboBox控件和QTableWidget控件横向排列,并将其设置为Main Window的central widget。当用户在组合框中选择具体项目时,信号槽机制触发了on_combobox_changed()函数,在该函数中通过QComboBox的model()函数获取到了组合框模型,再通过index()函数获取当前选中项目的QModelIndex对象,并在该对象上调用data()函数获取该项目的“值”角色数据(本例中为颜色名称和对应颜色值)。随后清空表格内容并添加新的一行,之后将颜色名称和值分别填入第一列和第二列中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 – 访问组合框中项目的角色 - Python技术站