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

我有以下代码填充 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 时调用(一次)的方法。


撒科打诨
浏览 342回答 1
1回答

LEATH

这是预期的行为,因为在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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python