"Cancel" 在 PyQt4 中打开文件时出错

Error when "Cancel" while opening a file in PyQt4

我有一个简单的 PyQt4 GUI,我让用户打开一个 txt 文件,该文件将显示在 GUI 的 QPlainTextEdit 小部件中。 这是伪代码:

class mainWindow(QtGui.QWidget):
    def __init__(self):
        super(mainWindow, self).__init__()
        self.layout = QtGui.QVBoxLayout()
        self.plain = QtGui.QPlainTextEdit()
        self.openButton = QtGui.QPushButton("OPEN")
        self.layout.addWidget(self.plain)
        self.layout.addWidget(self.openButton)
        self.openButton.clicked.connect(self.openFile)

    def openFile(self):
        openFileName = QtGui.QFileDialog.getOpenFileName(None, "Open File","/some/dir/","TXT(*.txt);;AllFiles(*.*)")
        openFile = open(openFileName,'r').read()
        self.plainTextEdit.appendPlainText(openFile)

所以我点击 "OPEN" 按钮,QFileDialog 弹出,但是如果我点击 QFileDialog 中的 "CANCEL" 按钮,我得到这个错误:

IOError: [Errno 2] No such file or directory: PyQt4.QtCore.QString(u'')

作为程序员,我知道这个错误很容易被忽略,不会影响代码的运行,但用户不知道。有没有办法消除终端打印的这个错误?

是:只需检查 getOpenFileName 中的 return 值。如果用户单击“取消”,此方法 return 为空 QString。由于空的 QString 被认为是错误的,您可以通过将 openFile 方法的最后两行放在 if openFileName: 语句中来检查用户是否选择了文件而不是单击“取消”:

    def openFile(self):
        openFileName = QtGui.QFileDialog.getOpenFileName(None, "Open File","/some/dir/","TXT(*.txt);;AllFiles(*.*)")
        if openFileName:
            openFile = open(openFileName,'r').read()
            self.plainTextEdit.appendPlainText(openFile)

如楼上所说,你应该调试检查什么样的答案"openFilename" returns.

在 Pyqt5 中,当您按取消或 'x' 关闭 window 时,它 returns 一个元组

所以要解决这个问题:

openFileName = QFileDialog.getOpenFileName(self)
if openFileName != ('', ''):
    with open(openFileName [0], 'r') as f:
        file_text = f.read()
        self.text.setText(file_text)