IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Probable évidence dans un "slot" : erreur pas de "self"


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Paysan
    Inscrit en
    Juin 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 45
    Par défaut Probable évidence dans un "slot" : erreur pas de "self"
    Bonjour,
    Question de slot/signal ... ou pas, car, comme le montre la ligne à la console:
    "Dans le slot : Pack de données archivé 10000"
    je suis bien "dans le slot" quand apparait l'erreur;
    notez que la ligne 15, dans le __init__ de la classe (... statusbar.showMessage ...) s'exécute bien;
    mais la ligne 27, analogue, provoque l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cs@cs-Vaio:~/Documents/Ateliers/Atl-Log/AptBureau$ python AptBureau.py
    {'Header': ['latitude', 'longitude', 'long', 'larg'], 'BP1': [42, 2, 100, 5], 'BP2': [42.5, 2, 80, 2.5], 'HF1': [42, 1.9, 100, 1.5], 'HF2': [42, 2.1, 100, 1.5]}
    Dans le slot :  Pack de données archivé 10000
    Traceback (most recent call last):
      File "/home/cs/Documents/Ateliers/Atl-Log/AptBureau/AptBureauUI.py", line 27, in slotStatusBar
        self.statusbar.showMessage(texte, tempo)
    NameError: name 'self' is not defined
    Pack de données archivé
    cs@cs-Vaio:~/Documents/Ateliers/Atl-Log/AptBureau$
    ... question de définition de classe et d'instance ?
    Désolé si c'est en fait évident, je suis assez "neuf" en Python ... et sur PSyde2 ...
    (mais j'ai cherché plus de 10mn ... -6h- ;-) )
    j'ai essayé "def slotStatusBar(self, texte, tempo):" à tout hazard ... qui donne:
    "TypeError: slotStatusBar() missing 1 required positional argument: 'tempo'

    Mon contexte : Ubuntu 18.04 LTS, Pyside2, Qt5, Python 3.6.8

    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    # Classes de base du UI de AptBureau
    # Début: 23 nov 2019
     
    from PySide2 import Qt, QtCore, QtWidgets, QtGui
     
    import mainwindow
    import Archive
     
    class AptBureauWin(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
        def __init__(self, parent=None):
            super(AptBureauWin, self).__init__(parent)
            self.setupUi(self)
     
    		# self.setWindowTitle("Apt Bureau") # dans le constructeur de Ui_MainWindow
            self.statusbar.showMessage("Ouverture", 10000)
            self.setWindowIcon(QtGui.QIcon('AptVerger.svg'))
     
            self.actionEnregistrer.triggered.connect(Archive.ArchiveDonnees)
            self.actionOpen.triggered.connect(Archive.ChargeDonnees)
     
            TableBandes= BandesModel(Archive.Bandes, self)
            self.tableView.setModel(TableBandes)
     
        @QtCore.Slot(str, int)
        def slotStatusBar(texte,tempo):
            print("Dans le slot : ", texte, tempo)
            self.statusbar.showMessage(texte, tempo)
     
        def EditeBandes():
            TableBandes= BandesModel(Archive.Bandes, self)
            self.tableView.setModel(TableBandes)

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Va falloir t'accoutumer à self comme à ton hombre def slotStatusBar(self, exte,tempo):.

    Pareil pour les autres méthodes.

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Je n'avais pas fait attention au problème du nombre d'argument au début de ton message mais donc ça veut dire que ton signal ne transmet qu'un seul argument et non deux.

    Comme on ne sait pas où cela se passe dans ton code ....

  4. #4
    Membre confirmé
    Homme Profil pro
    Paysan
    Inscrit en
    Juin 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 45
    Par défaut
    Hé non; j'ai bien les deux arguments transmis puisque j'ai le bon print dans la console:
    "Dans le slot : Pack de données archivé 10000" avant l'erreur, et avec les deux variables str et int:
    "Pack de données archivé"(str) et 10000(int)

    C'est pourquoi j'ai hésité à mettre le code appelant; le voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # Alertes : Classe de diffusion des alertes
    # AlerteStatusBar(texte,tempo): dans la barre de status
    # : dans une fenêtre (bouton "Ok")
    #
    # Début: 23 nov 2019
    #
    #MainWin.statusbar.showMessage(texte,tempo)
     
    #import pprint
    from PySide2.QtCore import QObject, Signal, Slot
     
    import AptBureauUI
     
     
    class Alertes(QObject):
        alerteST=Signal(str, int)
        def __init__(self):
            super(Alertes, self).__init__()
            self.alerteST.connect(AptBureauUI.AptBureauWin.slotStatusBar)
     
     
    def AlerteStatusBar(texte,tempo):
        alerte=Alertes()
        alerte.alerteST.emit(texte,tempo)
        print(texte)
        #mainwindow.Ui_MainWindow.statusbar.showMessage(texte,tempo)
    Avec le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        @QtCore.Slot(str, int)
        def slotStatusBar(self, texte, tempo):
            print("Dans le slot : ", texte, tempo)
            self.statusbar.showMessage(texte, tempo)
    j'ai, comme je résumais, l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cs@cs-Vaio:~/Documents/Ateliers/Atl-Log/AptBureau$ python AptBureau.py
    {'Header': ['latitude', 'longitude', 'long', 'larg'], 'BP1': [42, 2, 100, 5], 'BP2': [42.5, 2, 80, 2.5], 'HF1': [42, 1.9, 100, 1.5], 'HF2': [42, 2.1, 100, 1.5]}
    TypeError: slotStatusBar() missing 1 required positional argument: 'tempo'
    Pack de données archivé
    cs@cs-Vaio:~/Documents/Ateliers/Atl-Log/AptBureau$
    Et si je mets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        @QtCore.Slot(self, str, int)
        def slotStatusBar(self, texte, tempo):
            print("Dans le slot : ", texte, tempo)
            self.statusbar.showMessage(texte, tempo)
    qui, pour moi n'a pas de sens puisque self n'est pas un type, j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cs@cs-Vaio:~/Documents/Ateliers/Atl-Log/AptBureau$ python AptBureau.py
    Traceback (most recent call last):
      File "AptBureau.py", line 13, in <module>
        import AptBureauUI
      File "/home/cs/Documents/Ateliers/Atl-Log/AptBureau/AptBureauUI.py", line 9, in <module>
        class AptBureauWin(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
      File "/home/cs/Documents/Ateliers/Atl-Log/AptBureau/AptBureauUI.py", line 24, in AptBureauWin
        @QtCore.Slot(self, str, int)
    NameError: name 'self' is not defined
    cs@cs-Vaio:~/Documents/Ateliers/Atl-Log/AptBureau$

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    C'est ceci qui n'est pas bon: self.alerteST.connect(AptBureauUI.AptBureauWin.slotStatusBar) tu dois utiliser l'instance réelle de AptBureauWin qui existe dans ton code.

    Quand tu invoques AptBureauUI.AptBureauWin tu ne crées pas une instance de cette classe.

    Et supprime ce @QtCore.Slot(str, int) qui n'a rien à faire dans ce contexte et introduit une confusion pour le lecteur de ton code.

  6. #6
    Membre confirmé
    Homme Profil pro
    Paysan
    Inscrit en
    Juin 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 45
    Par défaut
    Ok; compris; mais c'est précisément ce que je voulais éviter; si j'ai besoin d'avoir l'instance de la fenêtre, je n'ai plus besoin d'un signal/slot pour communiquer avec cette fenêtre!
    Si il n'y a pas de solution signal/slot, j'abandonne et je me rabat sur les salades pas très belles pour retrouver l'instance de la mainWindow dans un module .py ...

Discussions similaires

  1. & dans des quotes, PivotTable
    Par MiniMonsters dans le forum Excel
    Réponses: 5
    Dernier message: 28/04/2016, 10h33
  2. [RegEx] Regex avec virgule dans double quotes
    Par LeHibou2 dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2012, 20h16
  3. gerer les ' dans une chaine pour eviter erreur sql
    Par Malone dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2005, 14h27
  4. librairie introuvable! Erreur"Pas d'objet dans ce contr
    Par vins111282 dans le forum Access
    Réponses: 5
    Dernier message: 16/05/2005, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo