用于QGIS python插件的PyQt QTableWidget:无限循环问题

时间:2014-06-25 21:44:14

标签: python pyqt qgis

我正在使用PyQt4和Python 2.7为QGIS 2开发插件。

QTableWidgets用于显示/比较数据库中的现有信息和新输入的相同功能的信息。对话框中有两个QTableWidgets - 当在一个表中选择一行时,我想连接到一个方法,在另一个表中选择一行将连接到另一个方法。按下按钮框上的正常按钮应该完成每个方法中的任务,按下取消应该回滚新的编辑。

我的问题:

我进入一个无限循环,重复连接到函数,无法关闭对话框并完成任务,无论是否正常,取消或关闭对话框。令人费解的是,每次似乎都会发生不同的事情 - 我猜测可能出现的问题:与混合信号和插槽有关的事情,或许我的函数应该返回一些东西,以便我可以退出它。

如果这是重要信息,buttonBox会向accepted()插槽中的插件模块发出accept()信号,并在rejected()插槽中向reject()信号发送插件模块。这是在PyQt4设计器中设置的。

以下是我的代码的一些相关部分:

def updateTableWidget(self, fid):
    ...
    self.dlg.ui.maintTable.itemSelectionChanged.connect(self.updateData)
    self.dlg.ui.existTable.itemSelectionChanged.connect(self.checkData)
    …

def updateData(self):
    QMessageBox.information(None, 'Connection Result', "In updateData method")
    result = self.dlg.exec_()

    if result == 1:
        self.myLayer.endEditCommand()
        QMessageBox.information(None, 'Whoopie PIE', "You have arrived at the terminal")
    else:
        self.myLayer.destroyEditCommand()

def checkData(self):
    QMessageBox.information(None, 'Connection Result', "In checkData method")
    result = self.dlg.exec_()

    if result == 1:
        QMessageBox.information(None, 'Info', "Turn around and try again later")
        self.myLayer.destroyEditCommand()
    else:
        self.myLayer.destroyEditCommand()

0 个答案:

没有答案