【问题标题】:Functions get called more and more times with reopening plugin重新打开插件时函数被调用的次数越来越多
【发布时间】: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 方法很有帮助。如果您将其发布为答案,我将很乐意接受。

标签: python qt pyqt qgis


【解决方案1】:

每次调用connect 时,它都会添加另一个连接——即使它是在同一个插槽上。所以你需要把连接从run()方法中移出,放到对话框的setup方法中,这样就只做一次。

【讨论】:

  • 谢谢!我一定误解了connect
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
相关资源
最近更新 更多