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

发布于 2021-01-29 19:33:54

我有一段代码使用Python3和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_())

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

(’‘,’‘)

注意:引号是单引号

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

关注者
0
被浏览
92
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    getOpenFileNamePyQt4中的函数返回一个字符串,该字符串是所选文件的名称,如果未选择任何名称,则它将返回一个空字符串。

    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中,因为通常方法的名称,输入和结果是相似的。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看