我正在使用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()
方法。信号明显增加了一倍(有时翻两番),从而导致一次点击就产生多个条目(执行代码)。
是什么原因导致的,我该如何避免它?