PyQt5 – 访问组合框中项目的角色

访问组合框中项目的角色指的是获取组合框中每个项目中的数据,一般情况下是通过角色(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技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日
合作推广
合作推广
分享本页
返回顶部