我正在使用pyside和sqlalchemy獲取聯繫信息數據庫。單鍵點擊觸發信號多次而不是一次
sqlalchemy的設置非常標準,除了當我使用sessionmaker()創建會話時,我設置了expire_on_commit = False
。
爲了能夠在一段時間內創建一個新的會話,我正在使用一種刷新按鈕。問題是我每次使用刷新按鈕時,當我嘗試添加一個新的行/條目時,我會得到2或4個附加條目(只需點擊一次),而如果刪除,所有「副本」也會被刪除他們不是真正的副本,但因爲他們每個人都有自己的唯一ID)。
def refresh(self):
self.session.close_all()
self.session = CreateSession(self.username, self.password) #custom method defined elsewhere for creating a session
self.TableViews() #initializing the table views for pyside
self.WidgetsToAttributes() #connect widgets of the gui to the sqlalchemy scheme attributes
self.connectSignals() #connects the qt signals to the appropriate functions in code
pass
(也有一些額外的初始化,但他們是這裏無關緊要,因爲他們只初始化一些小部件)
上述所有功能都用在別的地方,例如用於GUI的第一初始化,所以這裏不起作用的是這些方法的組合。從我收集的信息來看,這是導致所有麻煩的connectSignals()
方法。信號明顯增加了一倍(有時翻兩番),從而導致一次點擊就產生多個條目(執行代碼)。
是什麼原因導致的,我該如何避免它?