我有以下代码填充 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)
添加回答
举报
0/150
提交
取消