一次具有多个getSaveFileName窗口时出现问题-关闭一个窗口会关闭另一个窗口

时间:2020-03-21 19:07:26

标签: python python-3.x pyqt5 qfiledialog

我在GUI类中具有以下功能(简化)。我的应用程序是多线程的,因此有时在上一个函数完成之前会多次调用此函数。这不应该是一个问题,但是。

因此,当同时调用此函数时,将按预期打开多个窗口。对于其中一个窗口,我选择一个位置,然后单击“保存”,该窗口在该窗口中可以正常工作,返回选择的文件位置。但是,当我这样做时,其他窗口都关闭了,尽管我没有与之交互,但返回了空字符串。

有人可以阐明原因吗?

如果需要的话,将通过pyqt信号调用该函数。

def save_file_dialog(self, file_name):
    save_file_name = QFileDialog.getSaveFileName(self, "Save As", file_name)[0]

编辑: 最小的可重现示例:

import threading
import sys
import time
from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog
from PyQt5 import QtCore

class MainWindow(QMainWindow):
    save_file = QtCore.pyqtSignal(str)
    def __init__(self):
        super(MainWindow, self).__init__()
        self.save_file.connect(self.save_file_dialog)

    def save_file_dialog(self, file_name):
        save_file_name = QFileDialog.getSaveFileName(self, "Save As", file_name)[0]
        print(save_file_name)

def different_thread():
    x = 0
    while x != 3:
        window.save_file.emit("filename")
        time.sleep(0.5)
        x += 1

APP = QApplication(sys.argv)
window = MainWindow()

threading.Thread(target=different_thread).start()
sys.exit(APP.exec_())

有趣的事情。没有time.sleep,它会按预期工作。 不幸的是,我的设置意味着每次发射信号之间总会有一个延迟,尽管时间长。

编辑2: 我能够部分解决问题。

代替:

save_file_name = QFileDialog.getSaveFileName(self, "Save As", file_name)[0]

我这样做了

save_file_name = QFileDialog.getSaveFileName(self)[0]

出于某种我不知道的原因,摆脱这些争论会带来预期的行为。

0 个答案:

没有答案