PyQt学习——day6

文章目录

映射器

view里面列的值映射岛QWidget上,和delegate的作用差不多,不过mapper是和view分开,而delagateview上。

  1. 创建:QDataWidgetMapper
  2. 设置模型:setModel
  3. 绑定数据:addMapping
  4. 绑定变换:view.selectionModel().currentRowChanged.connect(mapper.setCurrentModelIndex)

如果使用proxy模型,需要多index先做一个映射。

from PyQt5.QtGui import QStandardItemModel
from PyQt5.QtWidgets import QApplication, QDataWidgetMapper, QLineEdit, QPushButton, QSpinBox, QWidget, QVBoxLayout, \
    QListView, QFormLayout, QTreeView, QTableView
from PyQt5.QtCore import QSortFilterProxyModel, QModelIndex


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()

        self.__settingWindow()
        self.__buildUI()
        self.__createModel()

    # ================== 辅助函数 ================== #
    def __settingWindow(self):
        self.resize(250, 300)

    def __buildUI(self):
        vbox = QVBoxLayout(self)

        self.listView = QTableView()
        self.listView.setSortingEnabled(True)
        vbox.addWidget(self.listView)

        form = QFormLayout()
        form.setHorizontalSpacing(50)
        vbox.addLayout(form)
        self.editName = QLineEdit()
        self.editSex = QLineEdit()
        form.addRow('姓名', self.editName)
        form.addRow('性别', self.editSex)

    def __initModelData(self):
        # 初始化数据
        info = [['小明', '男'],
                ['小呆', '女'],
                ['白衣服', '男']]

        for i in range(3):
            for j in range(2):
                index = self.model.index(i, j)
                self.model.setData(index, info[i][j])

    def __createModel(self):
        self.model = QStandardItemModel(3, 2)
        self.proxyModel = QSortFilterProxyModel()
        self.proxyModel.setSourceModel(self.model)

        self.listView.setModel(self.proxyModel)
        self.__initModelData()

        mapper = QDataWidgetMapper(self)
        mapper.setModel(self.model)
        mapper.addMapping(self.editName, 0)
        mapper.addMapping(self.editSex, 1)
        self.mapper = mapper
        self.listView.selectionModel().currentRowChanged.connect(self.__setCurrentModelIndex)
        # self.listView.selectionModel().currentRowChanged.connect(self.mapper.setCurrentModelIndex)

    def __setCurrentModelIndex(self, currentIndex: QModelIndex, prevIndex):
        currentIndex = self.proxyModel.mapToSource(currentIndex)
        parent = currentIndex.parent()
        self.mapper.setRootIndex(parent)
        self.mapper.setCurrentModelIndex(currentIndex)


if __name__ == '__main__':
    app = QApplication([])
    w = Demo()
    w.show()
    app.exec_()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值