jackinging 发表于 2020-11-11 08:49:58

请求大佬帮助,关于getopenfilename延迟返回

我使用pyqt进行了软件界面的开发,在进行文件打开时调用了 PyQt5.QtWidgets.QFileDialog.getOpenFileName()函数,用于返回用户打开的文件名称,后续进行文件读取处理。
但是使用这个函数打开文件过程中总是出现长时间延迟(偶尔会没有延迟,直接就返回文件名了)延迟时间达到了6-8s,已经严重影响了正常使用。
我在网上搜索了一下,没有发现类似问题的描述和处理意见。
不知道有没有大佬能够帮忙看一下,是什么原因导致的。
fileopen = QFileDialog.getOpenFileName(None, "打开数据文件", filter='*.da')

2269099035 发表于 2020-11-11 09:09:54

Stack Flow上面有https://stackoverflow.com/questions/21545319/qt-5-2-0-getopenfilename-slow。大致意思,就是不要用debug,还有用下面的代码,直接加载那个dll。

笨鸟学飞 发表于 2020-11-11 09:58:31

没用过pyqt
QFileDialog.getOpenFileName(None, "打开数据文件", filter='*.da')
查询了下帮助文档,感觉你第一个参数设置有误,你设置为空让它调用默认值试试看?

jackinging 发表于 2020-11-11 10:02:59

笨鸟学飞 发表于 2020-11-11 09:58
没用过pyqt
QFileDialog.getOpenFileName(None, "打开数据文件", filter='*.da')
查询了下帮助文档,感觉 ...

多谢您的回复!

默认值就是None,我将这个值设置为已经打开的窗口也可以,也就是用窗口的self。
主要问题是打开的速度,经常出现延迟,偶尔就没有问题了。非常奇怪,这样体验就太差了!
今天开机后就没事了,瞬间打开,昨天怎么弄都不行。
现在想的关键是希望找到原因,才能去处理。

笨鸟学飞 发表于 2020-11-11 11:00:38

jackinging 发表于 2020-11-11 10:02
多谢您的回复!

默认值就是None,我将这个值设置为已经打开的窗口也可以,也就是用窗口的self。


怎么我查的默认值是0?
我感觉一般不太可能会延迟太多的吧,python效率低也不可能低到那种程度吧?
要么试试多线程{:10_285:}

jackinging 发表于 2020-11-11 11:11:48

本帖最后由 jackinging 于 2020-11-11 14:57 编辑

笨鸟学飞 发表于 2020-11-11 11:00
怎么我查的默认值是0?
我感觉一般不太可能会延迟太多的吧,python效率低也不可能低到那种程度吧?
要 ...

是啊,不应该这么延迟的,但是实际就是这样。
    def getOpenFileName(self, parent=None, caption='', directory='', filter='', initialFilter='', options, QFileDialog_Options=None, QFileDialog_Option=None, *args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__
      """ getOpenFileName(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union = 0) -> Tuple """
      pass
这个是原型函数的注解,没有实现方式(我查了说是c编的,这里不显示源代码)。
多线程怎么处理还真不太懂,这里的处理只是返回打开的文件名,不处理其他问题。(也不处理文件,后面处理文件的速度没有问题。)

jackinging 发表于 2020-11-12 08:44:06

2269099035 发表于 2020-11-11 09:09
Stack Flow上面有https://stackoverflow.com/questions/21545319/qt-5-2-0-getopenfilename-slow。大致意思 ...

不好意思,昨天没看到您发的帖子,您的解答比较靠近真是情况,多谢!
后来我也是通过网络搜索,找到了解决方案,就是在参数设置中增加 , options=DontUseNativeDialog的参数,就不会延迟太久了,速度可以接受了。
但还是要写您的,多谢!
页: [1]
查看完整版本: 请求大佬帮助,关于getopenfilename延迟返回