PyQt5 - 单击QFileDialog上的取消关闭应用程序

时间:2016-05-25 04:22:05

标签: python pyqt qfiledialog

我注意到,使用以下代码,如果您选择点击"取消"在FileDialog上为"导入文件",整个应用程序关闭而不是返回菜单并等待不同的选择。我怎样才能让它回到mainMenu?

(注意:我注意到如果在初始文件对话框调用后我没有放任何东西,它运行正常。)

代码:

import sys
import xml.etree.ElementTree as et
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *


class MainMenu(QDialog):
    def __init__(self):
        QDialog.__init__(self)
        layout = QGridLayout()

        # Create Objects for Main Menu
        logoLabel = QLabel("TESTAPP")
        logoFont = QFont("Broadway", 48)
        logoLabel.setFont(logoFont)
        versionLabel = QLabel("Version 0.1a")
        copyrightLabel = QLabel("Copyright 2016")
        importButton = QPushButton("Import File")
        quitButton = QPushButton("Quit")

        # Set Locations of Widgets
        layout.addWidget(logoLabel, 0, 0)
        layout.addWidget(versionLabel, 1, 0)
        layout.addWidget(copyrightLabel, 2, 0)
        layout.addWidget(importButton, 4, 0)
        layout.addWidget(quitButton, 5, 0)
        self.setLayout(layout)
        self.setWindowTitle("NESSQL")

        # Connect Buttons to Actions
        importButton.clicked.connect(self.importFile)
        quitButton.clicked.connect(self.close)

    def importFile(self):
        # Open dialog box to get the filename
        file = QFileDialog.getOpenFileName(self, caption="File to Import", directory=".",
                                           filter="All Files (*.*)")
        data = et.parse(file)
        root = data.getroot()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainMenu = MainMenu()
    mainMenu.show()
    app.exec_()

1 个答案:

答案 0 :(得分:1)

通过保持检查文件是否为空的条件,可以避免此问题。 在您的情况下,类似这样。

def importFile(self):
    # Open dialog box to get the filename
    file = QFileDialog.getOpenFileName(self, caption="File to Import", 
                              directory=".",filter="All Files (*.*)")

    if not file[0] == "":
        data = et.parse(file)
        root = data.getroot()