如何关闭文件打开器而不会出现错误?

时间:2019-10-24 20:07:58

标签: python pyqt5

当我单击打开按钮时,GUI会给我选择文件的选项。如果我关闭文件选择器,则会出现错误。如何避免这种情况发生?

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QGridLayout, QWidget, QPushButton

class Window(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)
        self.Open = QPushButton('Open')
        self.Open.clicked.connect(self.open)
        self.show()
        layout = QGridLayout(centralWidget)
        layout.addWidget(self.Open)

    def open(self):
        name = QtWidgets.QFileDialog.getOpenFileName(self, 'Select File')
        file = open(name[0], 'r')
        lines = file.readlines()
        print(lines)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    sys.exit(app.exec_())

2 个答案:

答案 0 :(得分:0)

您必须验证文件名不是空字符串。

def open(self):
    filename, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Select File')
    if filename:
        with open(filename, 'r') as file:
            lines = file.readlines()
            print(lines)

答案 1 :(得分:0)

检查name是否有效

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QGridLayout, QWidget, QPushButton

class Window(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)
        self.Open = QPushButton('Open')
        self.Open.clicked.connect(self.open)
        self.show()
        layout = QGridLayout(centralWidget)
        layout.addWidget(self.Open)

    def open(self):
        name, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Select File')
        if name:                                 # <---
            with open(name) as file:
                lines = file.readlines()
                print(*lines, sep='\n')

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    sys.exit(app.exec_())