title: How can I inherit between classes in pyqt?
body: <p>In order to track progress, this is the third question about practicing with different classes in PyQt5 .Here are the links to my previous questions:<a href="https://stackoverflow.com/questions/55084363/opening-a-new-window">opening a new window</a>, <a href="https://stackoverflow.com/questions/55085868/open-a-file-from-main-window-to-a-new-window-in-pyqt5-in-different-files">Open a file from main window to a new window in PyQt5 (in different files)</a>. </p>
  
  <p>I'm trying to work with two classes, one with one button and when it's pressed it will load a file and show the text in a <code>QTextEdit</code> in other class.</p>
  
  <p>In the first questions I was suggested that as an alternative to work with more classes, they can inherit from <code>QMainWindow</code> so I looked for more info for doing this: <a href="https://stackoverflow.com/questions/21702897/pyqt-class-inheritance">PyQt class inheritance</a> </p>
  
  <p>The second question code did worked but it would show both windows at the same time, so this question: <a href="https://stackoverflow.com/questions/22538247/pyqt-how-to-hide-qmainwindow">PyQt: How to hide QMainWindow</a> guided me to write this code (I attatch this here because it's a little bit different from the one in the link, plus I apply what it says in the answer):</p>
  
  <pre><code>import sys, os
  from PyQt5 import QtGui, QtCore, QtWidgets
  from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
  
  class Dialog_02(QtWidgets.QWidget):
      def __init__(self, parent=None):
          super(Dialog_02, self).__init__(parent, QtCore.Qt.Window)
  
          self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
  
          myBoxLayout = QVBoxLayout()
  
          Button_02 = QPushButton ("Show Dialog 01")
          myBoxLayout.addWidget(Button_02)
  
          self.setLayout(myBoxLayout)
          self.setWindowTitle('Dialog 02')
  
          Button_02.clicked.connect(self.closeAndReturn)
  
      def closeAndReturn(self):
          self.close()
          self.parent().show()
  
  
  class Dialog_01(QtWidgets.QWidget):
      def __init__(self, parent=None):
          super(Dialog_01, self).__init__()
  
          self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
  
          myBoxLayout = QVBoxLayout()
  
          Button_01 = QPushButton ("Show Dialog 02")
          myBoxLayout.addWidget(Button_01)
  
          self.setLayout(myBoxLayout)
          self.setWindowTitle('Dialog 01')
  
          Button_01.clicked.connect(self.callAnotherQMainWindow)
  
      def callAnotherQMainWindow(self):
          self.hide()
          self.dialog_02 = Dialog_02(self)
          self.dialog_02.show()
  
  if __name__ == '__main__':
      app = QApplication(sys.argv)
      dialog_1 = Dialog_01()
      dialog_1.show()
      sys.exit(app.exec_())
  </code></pre>
  
  <p>In this code I'm not inheriting, but it works fine.</p>
  
  <p>The issue is that when I try to follow the same syntax in the original question code, it won't run, I'm not sure I'm getting inheritances fine.</p>
  
  <pre><code>import sys
  import os
  from PyQt5 import QtWidgets, QtGui, QtCore
  from PyQt5.QtWidgets import QApplication, QWidget
  from PyQt5.QtWidgets import QPushButton, QVBoxLayout, QTextEdit, QHBoxLayout, QLabel, QMainWindow, QAction, QFileDialog
  
  class SecondWindow(QWidget):
      def __init__(self, Window):
          super(SecondWindow, self).__init__(parent, QtCore.Qt.Window)
  
          self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
  
          self.text = QTextEdit(self)
          self.btn_return= QPushButton("Return")
          self.init_ui()
  
      def init_ui(self):
          v_layout = QVBoxLayout(self)
          v_layout.addWidget(self.text)
          v_layout.addWidget(self.btn_return)
          self.setLayout(v_layout)
          self.setWindowTitle('Opened Text')
  
          self.btn_return.clicked.connect(self.closeAndReturn)
  
      def closeAndReturn(self):
          self.close()
          self.parent().show()
  
  class Window(QMainWindow):
  
      textChanged = QtCore.pyqtSignal(str)
  
      def __init__(self, *args):
          super(Window, self).__init__()
  
          self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
  
          self.img = QLabel()
          self.load_file= QPushButton('Load')
  
          self.width = 400
          self.height = 150        
  
          self.init_ui()
  
      def init_ui(self):
          self.img.setPixmap(QtGui.QPixmap("someimage.png"))
  
  
          h_layout = QHBoxLayout()
          v_layout = QVBoxLayout()
          h_final = QHBoxLayout()
  
          h_layout.addWidget(self.img)
  
          v_layout.addWidget(self.load_file)
  
          h_final.addLayout(h_layout)
          h_final.addLayout(v_layout)
  
          self.load_file.clicked.connect(self.loadafile)
  
          self.setLayout(h_final)
          self.setWindowTitle('Main Window')
          self.setGeometry(600,150,self.width,self.height)
  
      @QtCore.pyqtSlot()
      def loadafile(self):
          filename = QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
          with open(filename[0], 'r') as f:
              file_text = f.read()
              self.textChanged.emit(file_text)
  
          self.hide()
          self.dialog_02 = SecondWindow(self)
          self.dialog_02.show()
  
  def main():
      app = QApplication(sys.argv)
      main = Window()
      s = SecondWindow(main)
      main.textChanged.connect(s.text.append)
      main.show()
  
  
  
      sys.exit(app.exec_())
  
  if __name__ == '__main__':
      main()
  </code></pre>