为了账号安全,请及时绑定邮箱和手机立即绑定

PyQt5 QTableWidget 信号连接器被调用两次

PyQt5 QTableWidget 信号连接器被调用两次

撒科打诨 2021-07-09 14:01:23
我有以下代码填充 QTableWidget: def populate_phone_table(self):        dataRows=["Office","Fax","Mobile","Other"]        self.tbl_phone_numbers.setRowCount(4)        self.tbl_phone_numbers.setColumnCount(2)        for ndx,value in enumerate(dataRows):            item = QTableWidgetItem(value)            item.setFlags(Qt.ItemIsEditable)            item.setForeground(QColor(0,0,0))            self.tbl_phone_numbers.setItem(ndx,0,item)            item = QTableWidgetItem("")            self.tbl_phone_numbers.setItem(ndx, 1, item)        self.tbl_phone_numbers.verticalHeader().hide()        self.tbl_phone_numbers.resizeRowsToContents()        self.tbl_phone_numbers.horizontalHeader().setSectionResizeMode(1,QHeaderView.Stretch)        self.tbl_phone_numbers.horizontalHeader().hide()        self.tbl_phone_numbers.itemChanged.connect(self.update_phone_table)    def update_phone_table(self,item):        print(item.text())        item.setForeground(QColor(255,0,0))我遇到的问题是当我编辑一列时,连接器被调用了两次。我不确定是不是信号发射了两次,这是设计问题还是我没有使用正确的信号。本质上,我需要在update_phone_table编辑 QTableViewItem 时调用(一次)的方法。
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

这是预期的行为,因为在


def update_phone_table(self,item):

    print(item.text())

    item.setForeground(QColor(255,0,0))

item.setForeground(QColor(255,0,0))更改项目,因此itemChanged()再次发出。如果您注释掉item.setForeground(QColor(255,0,0)),您将看到print(item.text())仅打印一次。


如果您坚持“在编辑 QTableViewItem 时调用(一次)update_phone_table 方法”,则可以像这样阻止信号:


def update_phone_table(self,item):

    print(item.text())

    self.tbl_phone_numbers.blockSignals(True)

    item.setForeground(QColor(255,0,0))

    self.tbl_phone_numbers.blockSignals(False)


查看完整回答
反对 回复 2021-07-13
  • 1 回答
  • 0 关注
  • 341 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信