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 :

probleme importation d'instance


Sujet :

Python

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 2
    Par défaut probleme importation d'instance
    Bonjour a tous,
    j'ai un soucis d'importation je travaille actuellement avec Pycharm
    J'ai 3 fichier main.py, mainProgram.py, classButton.py tous les 3 dans le même dossier

    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
     
    #fichier main.py
     
    from mainProgram import *
    import pygame as mainFrame
     
    running = True
    while running:
      for event in mainFrame.event.get():
        pass
        if event.type == mainFrame.QUIT:
          running = False
     
        elif event.type == mainFrame.MOUSEMOTION:
          (mainProgram.mouseX, mainProgram.mouseY) = mainFrame.mouse.get_pos()
     
        elif event.type == mainFrame.MOUSEBUTTONDOWN:
          mainProgram.mousePressed()
     
        elif event.type == mainFrame.MOUSEBUTTONUP:
          mainProgram.mouseReleased()
     
        mousePresseded = mainFrame.mouse.get_pressed()
        mainProgram.buttonUpdate()
      mainProgram.mainLoop()
      mainFrame.display.flip()
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #fichier mainProgram.py
     
    from classButton import button
    import pygame as programFrame
     
    prefButton = button("preference", (512), (300), 64, 64, "RECT", None, "ONOFF")
    #addLightButton = button("addLight", 512, 300, 150, 100, "RECT", None, "PUSH")
    #gpioPinButton = button("gpioPinButton", 512, 300, 150, 100, "RECT", None, "PUSH")
     
    class mainProgram:
        backgroundColor = (0, 0, 0)
        displayWidth = 1024
        displayHeight = 600
        display = programFrame.display.set_mode((displayWidth, displayHeight))
        programFrame.display.set_caption('OLC')
        display.fill(backgroundColor)
        clock = programFrame.time.Clock()
     
        mouseX = 0
        mouseY = 0
        mousePresseded = 0.
     
        def __INIT__(self):
            pass
     
        def setMouse(self):
            pass
     
        def buttonSetup(self):
            prefButton.setVisible(True)
            addLightButton.setVisible(False)
            gpioPinButton.setVisible(False)
            print(prefButton.visible)
     
        def buttonUpdate(self):
            prefButton.update()
            addLightButton.update()
            gpioPinButton.update()
     
        def mainLoop(self):
            self.display.fill((0,0,0))
     
        def mousePressed(self):
            pass
     
        def mouseReleased(self):
            pass
     
    mainProgram = mainProgram()
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    #fichier classButton.py
    from mainProgram import mainProgram
     
    class button(object):
        name = None
        x = 0
        y = 0
        buttonSizeX = 0
        buttonSizeY = 0 #img.get_size()
        mouseX = 0
        mouseY = 0
        mouseClick = None
        visible = False  # type: bool
        isPressed = False
        mode = ""  # type: str #RECT, CIRCLE, IMG
        buttontype = ""   #PUSH, ONOFF
        colorR = 255
        colorG = 255
        colorB = 255
        img = None
     
        textVisible = False
        textName = "Default"
        #myfont = mainFrame.font.Font('/home/danny/Bureau/Pycharm/pycharm_project/data/font/digital-7.ttf')
        #label = myfont.render(textName, 1, (0,0,0))
     
     
        def __init__(self, name_, x_, y_, buttonSizeX_, buttonSizeY_, mode_, img_, buttontype_):
     
            self.name = name_
            self.x = x_
            self.y = y_
            self.buttonSizeX = buttonSizeX_
            self.buttonSizeY = buttonSizeY_
            self.mode = mode_
            self.buttontype = buttontype_
            if mode_ == "IMG":
                self.img = mainProgram.transform.scale(img_, (self.buttonSizeX, self.buttonSizeY))
     
     
        def overButton(self):
            if self.x-(self.buttonSizeX/2)+(self.buttonSizeX/2) <= self.mouseX <= self.x+(self.buttonSizeX/2)+(self.buttonSizeX/2) and \
                    self.y-(self.buttonSizeY/2)+(self.buttonSizeY/2) <= self.mouseY <= self.y+(self.buttonSizeY/2)+(self.buttonSizeY/2):
               return True
            else:
               return False
     
        def setVisible(self, visible_):
            self.visible = visible_
     
        def setImg(self, img_):
            self.img = mainProgram.transform.scale(img_, (self.buttonSizeX, self.buttonSizeY))
     
        def setColor(self, color_):
            (self.colorR, self.colorG, self.colorB) = color_
     
        def setMode(self, mode_):
            self.mode = mode_
     
        def setButtonType(self, buttontype_):
            self.buttontype = buttontype_
     
        def setTextName(self, textName_):
            self.textName = textName_
     
        def setTextVisible(self, textVisible_):
            self.textVisible = textVisible_
     
     
        def show(self):
            if  self.visible and self.mode == "RECT":
                mainProgram.draw.rect(display, (self.colorR, self.colorG, self.colorB), [self.x, self.y, self.buttonSizeX,self.buttonSizeY])
            elif self.visible and self.mode == "CIRCLE":
                mainProgram.draw.ellipse(display, (self.colorR, self.colorG, self.colorB), [self.x, self.y, self.buttonSizeX,self.buttonSizeY])
            elif self.visible and self.mode == "IMG":
                display.blit(self.img, (self.x, self.y))
           # print(self.overButton())
           # print(self.isPressed)
     
           # if self.textVisible:
           #    display.blit(self.label, ((self.buttonSizeX/2), (self.buttonSizeY/2)))
     
        def pushButton(self):
            if self.overButton() and self.mouseClick[0] == 1:
                self.isPressed = True
            else:
                self.isPressed = False
     
        def onOff(self):
            if self.overButton and self.mouseClick[0] == 1:
                self.isPressed = not self.isPressed
     
        def update(self):
            (self.mouseX, self.mouseY) = programFrame.mouse.get_pos()
            self.mouseClick = programFrame.mouse.get_pressed()
            self.overButton()
            if self.buttontype == "PUSH":
                self.pushButton()
            elif self.buttontype == "ONOFF":
                self.onOff()
    et voici l'erreur
    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
     
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
      File "/home/danny/Bureau/Pycharm/pycharm-community-2018.3.2/helpers/pydev/_pydev_bundle/pydev_umd.py", line 198, in runfile
        pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
      File "/home/danny/Bureau/Pycharm/pycharm-community-2018.3.2/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
        exec(compile(contents+"\n", file, 'exec'), glob, loc)
      File "/home/danny/Bureau/Pycharm/Olc/main.py", line 1, in <module>
        from mainProgram import *
      File "/home/danny/Bureau/Pycharm/pycharm-community-2018.3.2/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
        module = self._system_import(name, *args, **kwargs)
      File "/home/danny/Bureau/Pycharm/Olc/mainProgram.py", line 1, in <module>
        from classButton import button
      File "/home/danny/Bureau/Pycharm/pycharm-community-2018.3.2/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
        module = self._system_import(name, *args, **kwargs)
      File "/home/danny/Bureau/Pycharm/Olc/classButton.py", line 1, in <module>
        from mainProgram import mainProgram
    ImportError: cannot import name 'mainProgram'
    je ne sais pas pour quel raison je ne suis pas capable d'appeller la class dans le fichier mainFram
    en même temps j’arrive de la programmation Processing j'aimerais savoir si ma façon de monter le programme est la bonne ex:mes class sont tu monter correctement ou a vos yeux il y a un probleme ou l'execution du fichier main est t-elle correct ou ...
    Présentement il y a pas mal d'erreur car sa fait 3 jours que je fait des tests sans résultat je m'arrange avec
    en gros dans le fichier mainProgram je declare pygame et je declare aussi display pour le set_mode
    comment je peux avoir accès a ses 2 instances la dans le fichier classButton

    Merci
    Danny

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 716
    Par défaut
    Salut,

    Citation Envoyé par ImDidi Voir le message
    je ne sais pas pour quel raison je ne suis pas capable d'appeller la class dans le fichier mainFram
    Lorsque vous faites des import "circulaires" comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #fichier mainProgram.py
    from classButton import button
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #fichier c
    from mainProgram import mainProgram
    vous devriez comprendre que la première instruction from classButton import button de mainProgram.py va exécuter la première instruction from mainProgram import mainProgram de mainProgram.py... et comme mainProgram ne sera défini qu'à la ligne 50 de mainProgram.py, on ne le trouve pas encore, d'où l'erreur ImportError: cannot import name 'mainProgram'.

    Donc vous ne pouvez pas découper votre code en modules n'importe comment: vous êtes obligé de vous plier à une certaine hiérarchie pour gérer les dépendances.
    note: vous pouvez tout avoir dans un même script. Découper proprement un programme en module ne se fait bien qu'après avoir compris comment fonctionne la POO avec Python. Ce qui peut prendre du temps.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 2
    Par défaut
    a cool merci de ton aide
    je tourne autour de ca

    a+

Discussions similaires

  1. [BO 5.1.9] Probleme import tableau excel dans bo
    Par APXLOLO dans le forum Deski
    Réponses: 8
    Dernier message: 08/08/2008, 09h57
  2. Probleme import fichier javascript
    Par snoozer dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 30/08/2006, 11h59
  3. probleme importation données
    Par minirom dans le forum Administration
    Réponses: 2
    Dernier message: 24/07/2006, 13h33
  4. plusieurs problemes importants
    Par arti2004 dans le forum Langage
    Réponses: 2
    Dernier message: 15/06/2006, 14h08
  5. [Classpath] probleme import de librairies
    Par logica dans le forum Général Java
    Réponses: 17
    Dernier message: 05/08/2005, 12h41

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