title: PyQt5 QFileDialog stops application from closing
body: <p>I am trying to write a PyQt5 application that does the following:</p>
  
  <ul>
  <li>Creates and opens a Main Window.  The MainWindow has a function that opens a QFileDialog window.</li>
  <li>Function to open QFileDialog can be triggered in two ways (1) from a file menu option called 'Open' (2) automatically, after the Main window is shown.</li>
  </ul>
  
  <p>My problem is that I haven't found a way to get the QfileDialog to automatically open (2) that doesn't cause the application to hang when the main window is closed.  Basic example of code can be found below:</p>
  
  <pre><code>import sys
  from PyQt5.QtWidgets import (QApplication, QMainWindow, QMenuBar, QWidget,
          QHBoxLayout, QCalendarWidget, QScrollArea, QFileDialog, QAction, QFrame)
  from PyQt5.QtGui import QIcon
  from PyQt5.QtCore import Qt
  
  class MainWindow(QMainWindow):
  
      def __init__(self, parent=None):
          super(MainWindow, self).__init__(parent)
  
          self.openAction = QAction(QIcon('/usr/share/icons/breeze/places/64/folder-open.svg'), 'Open', self)
          self.openAction.triggered.connect(self.openDialog)
  
          self.menubar = QMenuBar(self)
          fileMenu = self.menubar.addMenu('&amp;File')
          fileMenu.addAction(self.openAction)
  
          self.event_widgets = EventWidgets(self)
          self.setMenuBar(self.menubar)
          self.setCentralWidget(self.event_widgets)
  
      def openDialog(self):
  
          ics_path = QFileDialog.getOpenFileName(self, 'Open file', '/home/michael/')
  
  class EventWidgets(QWidget):
  
      def __init__(self, parent):
          super(EventWidgets, self).__init__(parent)
  
          self.initUI()
  
      def initUI(self):
          self.calendar = QCalendarWidget(self)
  
          self.frame = QFrame()
  
          self.scrollArea = QScrollArea()
          self.scrollArea.setWidget(self.frame)
  
          horizontal_box = QHBoxLayout()
          horizontal_box.addWidget(self.calendar)
          horizontal_box.addWidget(self.scrollArea)
  
          self.setLayout(horizontal_box)
  
  
  if __name__ == '__main__':
      app = QApplication(sys.argv)
      app_window = MainWindow()
      app_window.showMaximized()
      app_window.openDialog()
      sys.exit(app.exec_())
  </code></pre>
  
  <p>Code has been tested on KDE Neon and Arch Linux, both have same issue.</p>
  
  <p>I can get round this issue by handling the close event of the Main Window manually - i.e. adding this function to MainWindow:</p>
  
  <pre><code>def closeEvent(self, event):
          sys.exit()
  </code></pre>
  
  <p>But I am not sure a) why this is necessary b) if it is best practice.</p>