문제

I have 3 connect function in pyQt and are related to 3 signal,one slot and one widget:

    QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL(_fromUtf8("itemClicked(QTableWidgetItem*)")),
                           lambda:  self.materialsInstance.setFilterDict_Insert("TW",self,"imported_party_attributes",0,self.tableWidget.currentItem().row(),self.tableWidget.currentItem().column()))
    QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL(_fromUtf8("cellChanged(int,int)")),
                           lambda: self.materialsInstance.setFilterDict_Insert("TW",self,"imported_party_attributes",0,self.tableWidget.currentItem().row(),self.tableWidget.currentItem().column()))
    ###clear cell and remove from dict
    QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL(_fromUtf8("currentCellChanged(int,int,int,int)")),
                           lambda: self.materialsInstance.setFilterDict_Insert("TW",self,"imported_party_attributes",0,self.tableWidget.currentItem().row(),self.tableWidget.currentItem().column()))#,"currentCellChanged(int,int,int,int))"))

I didn't any problem with 2 first connect function, But i get the following traceback for 3th connect function:

Traceback (most recent call last):
  File "/home/mohsen/codes/amlak/amlak/src/materialsInsertFrame.py", line 244, in <lambda>
    lambda: self.materialsInstance.setFilterDict_Insert("TW",self,"imported_party_attributes",0,self.tableWidget.currentItem().row(),self.tableWidget.currentItem().column()))#,"currentCellChanged(int,int,int,int))"))
AttributeError: 'NoneType' object has no attribute 'row'

I didn't any idea on Signal-Sloting, Do you have ?

NOTE: 2 first connect functions work fine.

My question is , What's differences between first 2 signal and last signal?

도움이 되었습니까?

해결책

self.tableWidget.currentItem() can return None if there is no current item. You must always check if it is not None before using row() or column() on its result. This issue is not related to the nature of signals you use.

다른 팁

I solved, Signals are related to QTableWidget are 2 sets:

  1. related to current time
  2. no related to time.

At first option, i user get 'NoneType' object has no attribute 'row' because user doesn't click on widget, but in second option,We don't need time and don't get the given traceback.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top