【发布时间】:2017-01-15 03:12:19
【问题描述】:
我有一个用 Python 2.7.3 和 PyQt 4.9.1、Qt 4.8.1 编写的 QGIS 插件。当我运行这个插件时,每个功能都可以正常工作。但是当我关闭窗口并重新打开它时,每个功能都会发生两次。然后我再次关闭/打开,它会运行 3 次,等等等等。
我应该在哪里查找错误?我的def run(self) 部分看起来像这样:
def run(self):
self.dlg.show()
self.availableLayers()
self.dlg.pushButton_2.clicked.connect(self.openFile)
self.dlg.pushButton.clicked.connect(self.groupBy)
self.dlg.toolButton_4.clicked.connect(self.toggleRightPanel)
如果我通过单击“插件生成器”中的按钮重新加载插件,它会从一个重新开始。
我还应该提到我不想丢失用户创建的视图(该插件是一个表格查看器),而是能够关闭窗口,打开它并再次打开它,而不会清除单元格。
【问题讨论】:
-
你可能每次打电话给
connectrun。你可以修。您可以通过将Qt.UniqueConnection传递给connect来解决此问题,例如:self.dlg.pushButton_2.clicked.connect(self.openFile, Qt.UniqueConnection)。这似乎是一个相当糟糕的设计,您可能应该将信号和插槽连接到其他地方,但是您提供的代码无济于事。 -
self.availableLayers 每次都会被调用,它应该被调用,但我认为其余的功能只有在按下按钮时才会执行?不是 clicked.connect 的工作原理吗?
-
@adamczi。好吧,您似乎已经确认自己不是它是如何工作的。每次您拨打
connect时,它都会添加另一个连接——就这么简单。显然,您需要在对话框的设置方法中建立连接一次,而不是在run方法中。 -
非常感谢,将这些函数调用移至 setup 方法很有帮助。如果您将其发布为答案,我将很乐意接受。