QFileDialog 不断重新打开

Posted

技术标签:

【中文标题】QFileDialog 不断重新打开【英文标题】:QFileDialog keeps reopening 【发布时间】:2017-08-06 14:30:10 【问题描述】:

我为QGIS 编写了一个Qt 插件,在其中我有一个QPushButton browse_btn 来浏览输出文件夹。 我使用QFileDialog.getExistingDirectory 函数,一切正常。但是,如果我关闭插件并再次打开它,然后单击按钮添加路径,选择路径的打开窗口将在我选择路径或关闭后重新打开。如果我关闭插件并再次打开它,“选择路径”窗口将重新打开 3 次,依此类推...

类似的问题is still open here 和in comments here 可能还有solved here,但是由于没有提供代码,我无法应用它来解决我的问题。

具体代码如下:

self.dlg.browse_btn.clicked.connect(self.set_output)

def set_output(self):
    folder_path = str(QFileDialog.getExistingDirectory(self.dlg, u"Pick a folder"))
    if not folder_path:
        return None

我认为这是因为每次我打开-关闭插件时,都会使用self.dlg.browse_btn.clicked.connect(self.set_output) 创建单独的连接,并且它只会在我重新启动 QGIS 后断开连接

【问题讨论】:

您可以设置一个布尔标志以仅连接一次或仅在 QFileDialog 尚未运行时才运行它。 @JLev 你能提供一个快速的示例代码吗?我刚刚开始使用 Qt 为什么每次发出信号时都要连接它?您只需将这样的信号连接到某个执行一次的地方(例如小部件的构造函数)。 @Mike 你能提供一个简短的示例代码吗? @Vasily。编辑您的问题并显示所有插件的代码。 【参考方案1】:

试试这个 - 添加一个布尔标志 isConnected 到你的类(或 dlg)并将这个标志初始化为 false。

然后把你的连接线改成这个

if (!self.isConnected):
    self.dlg.browse_btn.clicked.connect(self.set_output)
    self.isConnected = true

【讨论】:

以上是关于QFileDialog 不断重新打开的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt Designer 中创建一个打开 QFileDialog 的信号?

如何使用 QFileDialog 打开带有 .mid 后缀的文件

单击文件名时 PyQt5 QFileDialog 关闭

取消 QFileDialog 时如何停止子窗口关闭

使用 QFileDialog 后 QMainWindow 进入后台

在 Qt 中如何在 QLineEdit 中添加带有 QFileDialog 的文件