Partage
  • Partager sur Facebook
  • Partager sur Twitter

appelle au classe dans main

    21 décembre 2016 à 16:36:48

    Bonjour,

    Je suis en train de créer une application desktop avec PyQt pour la vérification de la qualité d'un code dans un fichier.

    Pour le moment j'ai deux fichiers un qui contient le code de mon Interface et un fichier qui contient la classe main.

    Pour le premier fichier nommé "Frame.py" j'ai deux classes, une pour la création de l'interface et une pour le calcul du nombre de fonctions dans un code. Dans la classe main "Main.py" je fait appelle au deux classes, mais l'exécution correspond a celle de la première classe et non la deuxième.

    Je suis novice en ce qui concerne la programmation avec Python, donc je suis désolé si ma question semble évidente, mais comment je peux fixer ce problème :p

    voici les deux fichiers sur lesquelles je travaille

    #Frame.py
    
    class Window(QtGui.QMainWindow):
    
        def __init__(self):
            super(Window, self).__init__()
            self.setGeometry(50, 50, 500, 300)
            self.setWindowTitle("PyQT!")
            Exit = QtGui.QAction("&Exit", self)
            Exit.setShortcut("Ctrl+Q")
            Exit.setStatusTip('Quit')
            Exit.triggered.connect(self.close_application)
    
            OpenFile = QtGui.QAction("&Open File", self)
            OpenFile.setShortcut("Ctrl+O")
            OpenFile.setStatusTip("Open File")
            OpenFile.triggered.connect(self.File_Open)
    
            OpenEditor = QtGui.QAction("&Editor", self)
            OpenEditor.setShortcut("Ctrl+E")
            OpenEditor.setStatusTip("Open Editor")
            OpenEditor.triggered.connect(self.editor)
            
    
            mainMenu = self.menuBar()
    
            fileMenu = mainMenu.addMenu('&File')
            fileMenu.addAction(Exit)
            fileMenu.addAction(OpenFile)
    
            editorMenu = mainMenu.addMenu("&Editor")
            editorMenu.addAction(OpenEditor)
            self.show()
           
        def close_application(self):
            print("bye bye !")
            sys.exit()
    
        def editor(self):
            self.textEdit = QtGui.QTextEdit()
            self.setCentralWidget(self.textEdit)
    
        def File_Open(self):
            numl = 0
            commentCount = 0;
            self.name = QtGui.QFileDialog.getOpenFileName(self, 'Open File')
            #file = open(name, 'r')
    
            self.editor()
    
            defCount = 0
            with open(self.name, 'r') as file:
    
                for eachLine in file: #loops the lines in the file object ans sets the pointer to the end of the file
                    if eachLine.strip(): #check if the line is a blank line
                     numl += 1
                    if eachLine.find('#') != -1: #looks to find the comment tag
                        commentCount += 1
                print("number of comments %i" % commentCount)
                print("num lines %i: "% numl)
    
                file.seek(0, 0) #resets the pointer to the beginning of the file so we can read it again
                text = file.read()
                self.textEdit.setText(text)
                
    
            #function_counter = CountFunc(self.name)
    
    
    class CountFunc(ast.NodeVisitor):
        def __init__(self):
            self. func_count = 0
            self.path="ui/Frame.py"
            
    
        def visit_FunctionDef(self, node):
            self.func_count += 1
    
        def GoToPath(self):
            p = ast.parse(open(self.path).read())
            self.visit(p)
            print("number of functions:", self.func_count)


    #Main.py
    
    from PyQt4 import QtGui
    from ui.Frame import Window
    from ui.Frame import CountFunc
    
    class App(QtGui.QApplication):
        def __init__(self, sys_argv):
            super(App, self).__init__(sys_argv)
            self.fc = CountFunc()
            self.frame = Window()
    
    if __name__ == '__main__':
        app = App(sys.argv)
        counter = CountFunc()
        sys.exit(app.exec_())





    -
    Edité par chemseddine2 21 décembre 2016 à 16:40:50

    • Partager sur Facebook
    • Partager sur Twitter
      21 décembre 2016 à 18:10:01

      Salut,

      Je ne comprend pas vraiment la question, mais je vais essayer de répondre quand même :)

      Lorsque vous voulez utiliser des classes externes, il faut importer le Fichier, pas les Classes directement.

      Exemple:

      #Main.py
       
      from PyQt4 import QtGui
      from ui import Frame 
      
       
      class App(QtGui.QApplication):
          def __init__(self, sys_argv):
              super(App, self).__init__(sys_argv)
              self.fc = Frame.CountFunc()
              self.frame = Frame.Window()
       
      if __name__ == '__main__':
          app = App(sys.argv)
          counter = CountFunc()
          sys.exit(app.exec_())


      J'importe tous les classes du Fichier Frame.py... Ensuite j’appelle les classes.

      Je sais pas si cela répond à votre question :)

      Bonne chance

      A+

      -
      Edité par nolimitech 21 décembre 2016 à 18:12:30

      • Partager sur Facebook
      • Partager sur Twitter
        21 décembre 2016 à 22:18:26

        Merci bien pour votre réponse, 

        j'ai essayé votre solution mais le résultat et le même, il correspond au traitement fait dans la première classe 

        • Partager sur Facebook
        • Partager sur Twitter
          22 décembre 2016 à 19:42:39

          Salut,

          Si vous appelez vos classes externe, vous devez leur dire quoi faire.

          Ici, vous appelez vos modules Externes (classes).

          self.fc = Frame.CountFunc()
          self.frame = Frame.Window()

           Ensuite, ils faut leur dire quoi faire.

          Exemple:

          class CountFunc(ast.NodeVisitor):
              def __init__(self):
                  self. func_count = 0
                  self.path="ui/Frame.py"
          
              def visit_FunctionDef(self, node):
                  self.func_count += 1
           
              def GoToPath(self):
                  p = ast.parse(open(self.path).read())
                  self.visit(p)
                  print("number of functions:", self.func_count)

          self.fc.GoToPath()
          self.fc.visit_FunctionDef()
          self.frame.close_application()
          Si vos classes externe, n’appelle pas de fonction eux-même, c'est à vous de leur dire quoi faire.

          Si vous voulez que tout ce fasse automatiquement, il faut mettre des fonctions dans vos __init__ de vos classes externes.

          Exemple:

          class CountFunc(ast.NodeVisitor):
              def __init__(self):
                  self. func_count = 0
                  self.path="ui/Frame.py"
          
                  self.GoToPath() #Appelez la fonction dans le __init__
          
              def visit_FunctionDef(self, node):
                  self.func_count += 1
           
              def GoToPath(self):
                  p = ast.parse(open(self.path).read())
                  self.visit(p)
                  print("number of functions:", self.func_count)



          -
          Edité par nolimitech 22 décembre 2016 à 19:45:42

          • Partager sur Facebook
          • Partager sur Twitter
            22 décembre 2016 à 23:44:39

            nolimitech a écrit:

            Lorsque vous voulez utiliser des classes externes, il faut importer le Fichier, pas les Classes directement.

            Pourquoi donc ?

            • Partager sur Facebook
            • Partager sur Twitter
              23 décembre 2016 à 8:55:50

              Bah,  bonne question, je me suis mal exprimé.

              Quand il m'a répondu, et de la façon dont il a répondu. J'ai ré-écris un peu plus clair. Malheureusement, je ne connais pas les termes, haha.

              C'est surtout ceci que je voulais dire. J'ai supprimé tellement de phrase :)

              """

              Si vos classes externe, n’appelle pas de fonction eux-même, c'est à vous de leur dire quoi faire.

              Si vous voulez que tout ce fassent automatiquement, il faut mettre des fonctions dans vos __init__ de vos classes externes.

              """

              C'était pas l'importation de la classe que je voulais dire, mais plutôt la fonction dans la classe.

              Merci de l'avoir remarqué :p

              • Partager sur Facebook
              • Partager sur Twitter
                23 décembre 2016 à 9:48:10

                Et pourtant tu as changé ses from ui.Frame import ... en from ui import Frame.

                • Partager sur Facebook
                • Partager sur Twitter
                  23 décembre 2016 à 17:13:37

                  Salut,

                  Bah ça c'est uniquement, parce que je ne code pas avec cet ordinateur.

                  Donc je m'arrange, pour les import et autres fonctionnent, avec le code que j'ai donné.

                  nolimitech a écrit:

                  Ici, vous appelez vos modules Externes (classes).

                  self.fc = Frame.CountFunc()
                  self.frame = Frame.Window()

                  Edité par nolimitech il y a environ 21 heures

                  Je modifie le moins souvent possible.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  appelle au classe dans main

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown