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
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
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
× 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.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique