dircou 发表于 2024-9-18 12:12

pyqt5 dataChanged

弄了格表格来自动统计,可在
self.model.dataChanged.connect(self.tableEdit)
里遇到点问题,预想效果是改变了某个单元格里的内容后,根据大小来给自身赋值一个颜色
如:小于3500与大于9500则设置背景色或字体颜色为红色!
if vmodeIndex.column() == 3:
            row, column = vmodeIndex.row(),vmodeIndex.column()
      # 判断是否在位置列进行双击! abs()取绝对值,负数变正数;round()四舍五入,取整数!
            # print(self.model.index(row,3).data())
            data = self.model.index(row,3).data()
            print(f'Data数据:{data}')
            # 判断当前数据是否是纯数字!
            if not data.isdigit():
                item = QStandardItem('0')
                self.model.setItem(row, 7, item)
                item = QStandardItem('0')
                self.model.setItem(row, 4, item)
                return
            if int(data) < 3500 or int(data) > 9500:
                # 设置背景色
                print('内容大于或小于系统预设值!')
                item = QStandardItem(data)
                # #self.model.setItem(vmodeIndex,)
                item.setForeground(QBrush(QColor(255, 0, 0)))# 设置字体颜色
                # # item.setBackground(QBrush(Qt.red))
                self.model.setItem(row, column - 1, item)

边学边弄的,运行到self.model.setItem(row, column - 1, item) 这里就死循环崩溃!

hei2023 发表于 2024-9-18 16:39

这是干嘛呀

tp522022 发表于 2024-9-18 16:46

没理解错的话 你监听一个cell的变更 ,然后修改cell的外观继续触发cell的变更 不死循环才怪。

kk007kangkai 发表于 2024-9-18 17:56

if self.model.index(row, column - 1).data() != data:
      self.model.setItem(row, column - 1, item)

marione 发表于 2024-9-18 18:05

本帖最后由 marione 于 2024-9-18 18:08 编辑

在setItem前把信号关掉,以前遇到过

blockSignals

XiangMaster 发表于 2024-9-26 21:16

厉害了大佬

dircou 发表于 2024-9-26 22:48

感谢各位,以解决
在self.model.setItem(row, column - 1, item) 前关闭信号检测!
页: [1]
查看完整版本: pyqt5 dataChanged