【问题标题】:PyQt5 QTableWidget signal connector called twicePyQt5 QTableWidget 信号连接器被调用两次
【发布时间】:2018-10-10 20:01:27
【问题描述】:

我有以下填充 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))

我遇到的问题是当我编辑一个列时,连接器被调用了两次。我不确定是信号触发了两次,这是设计还是我没有使用正确的信号。本质上,我需要在编辑 QTableViewItem 时调用(一次)update_phone_table 方法。

【问题讨论】:

    标签: python python-3.x pyqt5 qtablewidget


    【解决方案1】:

    这是预期的行为,因为在

    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)
    

    【讨论】:

    • 太棒了。谢谢杜鹃花。我没有意识到改变颜色也会导致信号再次发射。感谢您的帮助!
    猜你喜欢
    • 2019-02-19
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多