Partage
  • Partager sur Facebook
  • Partager sur Twitter

Remplacement d'une image dans un Canvas TK

    28 novembre 2021 à 16:44:56

    Bonjour,

    Je suis en train avec un ami de créé un software pour le calcul auto de la répartition des masses et centrage dans un avion, avec affichage des informations de vol afin de préparer l'avion avant la mise en route, je précise que c'est pour de la simulation...Nous sommes des novices en Python, mais nous apprenons tout les jours, les tutos, les forums, des heures et des heures à buter sur du code (des fois des semaines) jusqu'a ce que nous trouvions par nous-même, quand nous avons du temps entre famille et boulot.

    Toute la partie calculs et graphique est ok, meme si le code, je suis certain, pourrait être amélioré..et raccourci (actuellement 2400 lignes de code)
    Nous en sommes actuellement à personnaliser un peu l'affichage en voulant créer un mode claire et sombre..et c'est là qu'intervient notre soucis...Je précise que nous bossons avec TKinter pour la partie graphique..Donc..

    Via des boutons radio,

    -nous déclenchons l'écriture dans une base SQL du nom du mode, des codes couleurs pour modifier le bg= des widgets et on relance notre fenetre principale "ofpwindow" via une fonction et la selection du background via une class, afin de rafraichir et appliquer les changements.

    - ensuite via des conditions dans la class, selon le theme choisi, nous chargeons une image de background spécifique.

    -Mais cela ne fonctionne pas..si nous voulons changer le theme, la couleur de fond des widgets changent correctement mais l'image en background reste la même, sauf si on redémarre le logiciel (là il nous charge bien l'image selon le theme qui a été choisi auparavant)..

    Ca fait 1 semaine que je suis dessus, j'ai tenté de résoudre le problème en m'appuyant sur tout ce que j'ai pu voir sur les forums pour des problèmes similaires, des tutos, mais je n'ai plus d'idées..

    Ce dont je suis sûr c'est que les write & read dans la base SQL fonctionnent et donc que les conditions pour changer l'image background fonctionnent, puisque testé avec des prints, ça bug après...

    Voici le bout de code:

    # Fenetre principale du programme
    ofpwindow = Tk()
    
    
    #ici la fonction dans une class qui lance la lecture de la #baseSQL, la fonction page() <br>#et persopage() avec envoie "sombre" ou "classique" via etattheme('')
    
    
    class persopage:
        def __init__(self):
            self.ofpwindow = ofpwindow
            self.ofpwindow.geometry("1050x600")
            self.ofpwindow.resizable(width=False, height=False)
            self.canvasarr = Canvas(self.ofpwindow, bg="#545454", height=600, bd=0, highlightthickness=0)
            self.background = PhotoImage(file="icons/map_lines.png")
            self.background2 = PhotoImage(file="icons/dark_map_lines_dark.png")
            self.ofpwindow.iconbitmap("icons/FMSINFO.ico")
            if etattheme('') == 'classique':
                self.canvasarr.create_image(600, 200, image=self.background)
                self.image = self.background
                self.canvasarr.pack(expand=YES, fill=BOTH)
            elif etattheme('') == 'sombre':
                self.canvasarr.create_image(600, 200, image=self.background2)
                self.image = self.background2
                self.canvasarr.pack(expand=YES, fill=BOTH)
    
    
    pep = persopage()
    
    
    #def page():
    #Tout le contenu de la fenetre ofpwindow
    
    
    persopage()
    page()
    
    ofpwindow.mainloop()

    Je remercie les personne qui ont pris le soin de lire mon sujet et ceux qui pourront m'aider/m'aiguiller.
    Cdlt, Fred

    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2021 à 20:50:55

      fredMika a écrit:

      Mais cela ne fonctionne pas..si nous voulons changer le theme, la couleur de fond des widgets changent correctement mais l'image en background reste la même, sauf si on redémarre le logiciel (là il nous charge bien l'image selon le theme qui a été choisi auparavant)..

      Lorsqu'on lit le code, l'image chargée en background dépend d'etattheme('')...

      Comme Python ne se trompe pas, il serait cohérent que çà retourne la même valeur jusqu'au redémarrage de l'application.

      Le problème est que vous prétendez que "print" dit le contraire...  mais vous croire ne pas aider à corriger un problème qui n'existe pas dans le code que vous avez posté.

      • Partager sur Facebook
      • Partager sur Twitter
        29 novembre 2021 à 2:11:56

        En effet j'ai placé sous le "if" et "elif", des >>>print(etattheme('') , et j'ai bien les valeurs "sombre" et "classique" qui s'affiche en console selon le theme selectionné par les boutons.Et au démarrage de l'application, en effet, la bonne image background selon le theme choisi au dernier démarrage de l'application est chargée.

        Je me suis donc dit que le probleme vient peut-etre du fait que l'image créée est détruite à la fin de la fonction de la class persopage..d'où l'essai du referencement de l'image via self.image = self.background mais qui ne resout pas mon probleme.

        Après si il y a un autre probleme dans le code, comme j'ai dis, c'est 2400lignes déjà écrites, donc ca va etre bordélique de le poser ici, à part passer par Git ...

        -
        Edité par fredMika 29 novembre 2021 à 2:13:17

        • Partager sur Facebook
        • Partager sur Twitter

        Remplacement d'une image dans un Canvas TK

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown