繁体   English   中英

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

[英]Is there a difference between QFileDialog strings in PyQt4 and PyQt5?

我有一个使用 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 之间发生了变化,但我不确定这些变化会导致这样的问题。 谢谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM