Un débutant sur pyqt
Résolu
Oliv
-
gudu -
gudu -
Bonjour,
j'ai une erreur sur la 31 de mon prog qui pourtant fonctionné très bien:
Traceback (most recent call last):
File "C:\Users\util10\Projet py\Liste de points\Liste_points.py", line 31, in on_pushButtonSuivant_clicked
self.textBrowser.append(objetchantier.NomChantier)
NameError: name 'objetchantier' is not defined
mon objet est crée à la construction de mon interface dans le def __init__
donc je ne comprend pas d’où vient le problème surtout que ce code marché parfaitement auparavant
Voici mon code:
Si vous avez une idée et des explication que je comprend mon erreur.
Merci
j'ai une erreur sur la 31 de mon prog qui pourtant fonctionné très bien:
Traceback (most recent call last):
File "C:\Users\util10\Projet py\Liste de points\Liste_points.py", line 31, in on_pushButtonSuivant_clicked
self.textBrowser.append(objetchantier.NomChantier)
NameError: name 'objetchantier' is not defined
mon objet est crée à la construction de mon interface dans le def __init__
donc je ne comprend pas d’où vient le problème surtout que ce code marché parfaitement auparavant
Voici mon code:
# -*- coding: utf-8 -*-
# start_app.py
import sys
import bar
from PyQt5.QtWidgets import QMainWindow, QFileDialog, QMessageBox, QApplication
from PyQt5.QtCore import pyqtSlot
from Ui_MainWindowListePoints import *
from class_info_chantier import *
class MainWindowListePoints(QMainWindow, Ui_MainWindowListePoints):
def __init__(self,parent=None):
super(MainWindowListePoints,self).__init__(parent)
self.setupUi(self)
#On instancie un objet de la classe Infochantier à l'ouverture du programme
'''objetchantier = InfoChantier("Nom du chantier", "AF00-000",
"Nom du client", "Adresse du Chantier", "Status du documents",
"chemin image")'''
objetchantier = InfoChantier(self.lineEditNomChantier.text(), self.lineEditNumAffaire.text(),
self.lineEditNomClient.text(), self.lineEditAdresseChantier.text(), self.comboBox.currentText(),
"chemin image")
#On grise les QlineEdit et QdateEdit des Révisions non utiliser
self.lineEditRemarques1.setDisabled(1)
self.dateEditR1.setDisabled(1)
@pyqtSlot()
def on_pushButtonSuivant_clicked(self):
self.textBrowser.append(objetchantier.NomChantier)
self.textBrowser.append(objetchantier.NumrAffaire)
self.textBrowser.append(objetchantier.NomClient)
self.textBrowser.append(objetchantier.AdresseChantier)
self.textBrowser.append(objetchantier.Statut)
@pyqtSlot()
def on_action_Ouvrir_triggered(self):
(nomFichierListePoints,filtre) = QFileDialog.getOpenFileName(
self,"Ouvrir fichier Liste de Points",
filter="ListeDePoints (*.ldperp);; Tout (*.*)")
if nomFichierListePoints:
# TODO: trace temporaire à remplacer par la lecture du fichier
QMessageBox.information(self,"TRACE",
"Fichier à ouvrir:\n\n%s"%nomFichierListePoints)
@pyqtSlot()
def on_pushButtonCharger_clicked(self):
(nomFichierListePoints,filtre) = QFileDialog.getOpenFileName(
self,"Ouvrir fichier Liste de Points",
filter="ListeDePoints (*.ldperp);; Tout (*.*)")
if nomFichierListePoints:
# TODO: trace temporaire à remplacer par la lecture du fichier
QMessageBox.information(self,"TRACE",
"Fichier à ouvrir:\n\n%s"%nomFichierListePoints)
@pyqtSlot()
def on_pushButtonEnrengistrer_clicked(self):
# TODO: trace temporaire à remplacer par la lecture du fichier
self.textBrowser.append(str(self.spinBox.value()))
@pyqtSlot()
def on_pushButtonImageChantier_clicked(self):
(nomFichierImageChantier,filtre) = QFileDialog.getOpenFileName(
self,"Choisir une image",
filter="Image (*.jpeg);; Tout (*.*)")
if nomFichierImageChantier:
# TODO: trace temporaire à remplacer par la lecture du fichier
QMessageBox.information(self,"TRACE",
"Fichier à ouvrir:\n\n%s"%nomFichierImageChantier)
@pyqtSlot()
def on_actionA_Propos_triggered(self):
# TODO: Editer le a propos
texte_test=self.lineEditNomChantier.text()
self.lineEditNomClient.setText(texte_test)
@pyqtSlot()
def on_action_Quitter_triggered(self):
self.close()
def closeEvent(self,event):
messageConfirmation = "Êtes-vous sûr de vouloir quitter Liste de Points EREP ?"
reponse = QMessageBox.question(self,"Confirmation",
messageConfirmation,QMessageBox.Yes,QMessageBox.No)
if reponse == QMessageBox.Yes:
#TODO: Vérifier si enrengistrement fait?
event.accept()
else:
event.ignore()
#Edition des argument s de la class infochantier si modification
@pyqtSlot()
def on_lineEditNomChantier_editingFinished(self):
objetchantier.NomChantier = self.lineEditNomChantier.text()
@pyqtSlot()
def on_lineEditNumAffaire_editingFinished(self):
objetchantier.NumrAffaire = self.lineEditNumAffaire.text()
@pyqtSlot()
def on_lineEditNomClient_editingFinished(self):
objetchantier.NumClient = self.lineEditNomClient.text()
@pyqtSlot()
def on_lineEditAdresseChantier_editingFinished(self):
objetchantier.AdresseChantier = self.lineEditAdresseChantier.text()
@pyqtSlot()
def on_comboBox_activated(self):
#objetchantier.Statut = self.comboBox.
self.textBrowser.append(self.comboBox.currentText())
#implementation des objet pour les révisions
@pyqtSlot()
def on_checkBoxR1_stateChanged(self):
self.textBrowser.append("cocher moi cette merde chien")
self.lineEditRemarques1.setDisabled(0)
self.dateEditR1.setDisabled(0)
app = QApplication(sys.argv)
mainWindowListePoints = MainWindowListePoints()
mainWindowListePoints.show()
rc = app.exec_()
sys.exit(rc)
Si vous avez une idée et des explication que je comprend mon erreur.
Merci
A voir également:
- Un débutant sur pyqt
- Logiciel de programmation pour débutant - Guide
- Logiciel montage vidéo débutant - Guide
- Comment utiliser un ordinateur pour un débutant - Astuces et Solutions
- Apprendre le coran pour débutant (+ pdf) - Télécharger - Histoire & Religion
- Platine dj debutant - Forum Enregistrement / Traitement audio
5 réponses
Pas bien réveillé ?
C'est self.objetchantier = blabla
Ainsi tu pourras y accéder dans toutes tes méthodes de ta classe en utilisant self.objetchantier.
Je pense quand même que t'étais pas bien réveillé ce matin car tu le fais bien pour les autres attributs de ta classe :D
C'est self.objetchantier = blabla
Ainsi tu pourras y accéder dans toutes tes méthodes de ta classe en utilisant self.objetchantier.
Je pense quand même que t'étais pas bien réveillé ce matin car tu le fais bien pour les autres attributs de ta classe :D
Merci de ta réponse mais quand je place self devant mon attribut j'ai l'erreur suivante:
self.objetchantier.NomChantier = self.lineEditNomChantier.text()
AttributeError: 'MainWindowListePoints' object has no attribute 'objetchantier'
objetchantier est un objet que j'instancie à la construction de la class MainWindowListePoints je devrais pourtant y avoir accès dans les méthodes de cette même classe non?
self.objetchantier.NomChantier = self.lineEditNomChantier.text()
AttributeError: 'MainWindowListePoints' object has no attribute 'objetchantier'
objetchantier est un objet que j'instancie à la construction de la class MainWindowListePoints je devrais pourtant y avoir accès dans les méthodes de cette même classe non?
Un simple test :
Je ne connais pas trop les rouages de super() mais généralement super().__init__(self) suffit, python s'occupe très bien du mro tout seul.
>>> class A : ... def __init__(self): ... self.a = 10 ... >>> class B(A): ... def __init__(self): ... super(A, self).__init__() ... print(self.a) ... >>> b = B() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in __init__ AttributeError: 'B' object has no attribute 'a'
Je ne connais pas trop les rouages de super() mais généralement super().__init__(self) suffit, python s'occupe très bien du mro tout seul.
Bonjour,
Suite à différents essais il semble que si j'instancie un objet dans le constructeur d'un autre je ne peux pas accéder aux arguments de celui-ci
en conséquence pour y accéder il faut déclarer son objet en dehors comme suit:
Donc problème résolut pour moi même si j'ai des choses à apprendre encore...
Merci Gudu pour tes réponse.
Suite à différents essais il semble que si j'instancie un objet dans le constructeur d'un autre je ne peux pas accéder aux arguments de celui-ci
# -*- coding: utf-8 -*-
# Test des acces des attributs entre objet
class toto:
variable_a = "yes"
variable_b = 33
varibale_c = "Je sais pas j'apprend!!"
class bob:
def __int__(self):
blague = toto()
print("objet toto crée")
def testacces(self):
print(blague.variable_a)
print(blague.variable_b)
print(blague.varibale_c)
essai = bob()
# Là j'ai une erreur de définition pour blague!!
blague.variable_a
blague.varibale_c
essai.testacces()
en conséquence pour y accéder il faut déclarer son objet en dehors comme suit:
# -*- coding: utf-8 -*-
# Test des acces des attributs entre objet
class toto:
variable_a = "yes"
variable_b = 33
varibale_c = "Je sais pas j'apprend!!"
class bob:
def __int__(self):
print("objet de classe bob crée")
def testacces(self):
print(blague.variable_a)
print(blague.variable_b)
print(blague.varibale_c)
essai = bob()
blague = toto()
# Là j'ai une erreur de définition pour blague!!
blague.variable_a
blague.varibale_c
essai.testacces()
Donc problème résolut pour moi même si j'ai des choses à apprendre encore...
Merci Gudu pour tes réponse.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je pense que tu confonds variable de classe et variable d'instance.
Selon ton exemple, dans le cadre d'une composition :
Pour l"héritage, c'est identique, sauf que l'attribut a sera interne à la classe héritant de Toto.
Selon ton exemple, dans le cadre d'une composition :
class Toto: a = "yes" def __init__(self): print("toto est là") class Bob: def __init__(self): print("bob est là") self.toto = Toto() def test(self): print("Variable d'instance self.toto.a", self.toto.a) print("Variable de classe Toto.a", Toto.a) def set_a(self, value): self.toto.a = value bob = Bob() bob.test() bob.set_a("No") bob.test()
Pour l"héritage, c'est identique, sauf que l'attribut a sera interne à la classe héritant de Toto.
class Toto: a = "yes" def __init__(self): print("toto est là") class Bob(Toto): def __init__(self): print("bob est là") super().__init__() def test(self): print("Variable d'instance self.a héritée de toto", self.a) print("Variable de classe Toto.a", Toto.a) def set_a(self, value): self.a = value bob = Bob() bob.test() bob.set_a("No") bob.test()