PyQt4和PyQt5中的QFileDialog字符串有区别吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyQt4和PyQt5中的QFileDialog字符串有区别吗?相关的知识,希望对你有一定的参考价值。

我对python很新,所以请耐心等待。我有一个代码块,使用Python 3和PyQt5打开QFileDialog:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog
import sys


class MCVE(QWidget):

    def __init__(self):
        super().__init__()
        self.initialize()

    def initialize(self):
        self.setWindowTitle('MCVE')
        self.setGeometry(50, 50, 400, 200)
        btn = QPushButton('Example', self)
        btn.clicked.connect(self.clicked)

        self.show()

    def clicked(self):
        filename = QFileDialog.getOpenFileName(
            self, "Open Template", "c:\",
            "Templates (*.xml);;All Files (*.*)")

        print(filename)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MCVE()
    sys.exit(app.exec_())

在Python 2中使用PyQt4 print(filename)语句,在按下取消按钮后,输出为空字符串。当我使用PyQt5在Python 3中运行相同的代码时,我得到:

('', '')

注意:报价是单引号

有人可以解释发生了什么吗?我在PyQt4和PyQt5之间的文档下找不到任何东西。我知道Python 2和Python 3之间的字符串发生了变化,但我不确定这些变化是否会导致这样的问题。谢谢!

答案

PyQt4中的getOpenFileName函数返回一个字符串,该字符串是所选文件的名称,如果没有选中,则返回一个空字符串。

filename = QFileDialog.getOpenFileName(self, "Open Template", "c:\", "Templates (*.xml);;All Files (*.*)")

但是在PyQt5中,它返回一个包含2个元素的元组,其中第一个是与PyQt4具有相同行为的字符串,第二个元素是使用的过滤器。

filename, filters = QFileDialog.getOpenFileName(self, "Open Template", "c:\", "Templates (*.xml);;All Files (*.*)")

注意:PyQt5的大部分文档都在Qt5中,因为通常方法的名称,条目和结果是相似的。

以上是关于PyQt4和PyQt5中的QFileDialog字符串有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

PyQt4文件对话框QFileDialog

Python PyQt4 QFileDialog 图像并在 QListWidget 中加载

Pyinstaller 的 PyQT5 QFileDialog 问题

PyQT5 QFileDialog窗口标题未在mac上显示

单击文件名时 PyQt5 QFileDialog 关闭

PyQt5 支持不从 QObject 继承的类中的信号