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 :

Le newbie est toujours là : traiter un événement dans une classe ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut Le newbie est toujours là : traiter un événement dans une classe ?
    Bonjour tout le monde, c'est toujours moi, avec mes problèmes...

    J'ai posé la question sur un autre forum, mais ils ne répondent pas... On en pensera ce qu'on voudra.

    Voila : je souhaite créer une classe comportant une frame sur laquelle je désire traiter le cas où l'utilisateur clique : alors, l'image de fond change, et une propriété de la classe change aussi.

    Si j'étais dans la programmation du "main", je mettrais dans mon appel de frame "command = clic", mais, puisque je suis dans la programmation d'une classe, je ne dois pas perdre le lien avec l'instance de la classe à laquelle ce clic se rapporte : en deux mots comme en cent, il faudrait (si j'ai bien compris python, ce qui n'est pas gagné, finalement) que cette routine soit appelée sous la forme "command='clic(self...)'". Or, à cela, je n'ai pas droit, me semble-t-il.

    Je suis très étonné de ne rien trouver qui m'aide chez mon ami Google, ce n'est pourtant pas faute de lui avoir posé des questions. Il faut croire que je ne sais pas bien lui poser mes questions.

    Quoi qu'il en soit, si certains d'entre vous comprennent mieux mon problème que lui, ils recevront des remerciements chaleureux s'ils veulent bien me communiquer leurs réponses.

    AMIcalement...

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Citation Envoyé par L'AMI Yves Voir le message
    en deux mots comme en cent, il faudrait (si j'ai bien compris python, ce qui n'est pas gagné, finalement) que cette routine soit appelée sous la forme "command='clic(self...)'". Or, à cela, je n'ai pas droit, me semble-t-il.
    Et si vous commenciez par ouvrir un tuto?

    Ça vous explique les classes avec Python et comme la programmation d'un GUI graphique est suffisamment compliquée pour en tirer profit, c'est plein d'exemples de code.
    Mon préféré est le Swinnen, vous avez tout un chapitre sur tkinter et les classes.

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

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Ah ça !!!! Je l'ai déjà vu, celui là ! Peut-être même plusieurs fois. Il y a quelque chose qui cloche là-dedans (pour que je n'aie opas vu que ça répondait à ma question). J'y retourne immédiatement.

    Merci.

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Re-bonjour.

    Alors voici ce que ça donne :
    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
    # -*- coding: utf8 -*- 
    """ Module des objets (widgets) utilisés dans l'émetteur.py
    (C) AMI 2018  """
    from tkinter import *
    from PIL import Image, ImageTk
    root=Tk()
    image=Image.open("./Images/InterF.jpg")
    BoutonFerme=ImageTk.PhotoImage(image)
    image=Image.open("./Images/InterO.jpg")
    BoutonOuvert=ImageTk.PhotoImage(image)
     
    class Inter:
     
        def __init__(self, nom, larg, haut, parent):
            """ Un Inter a un nom, une largeur, une hauteur et un parent.
            Il a aussi un état, ouvert ou fermé, que l'on change en cliquant"""
            self.BoutonO=ImageTk.PhotoImage(BoutonOuvert.resize(larg,haut))
            self.BoutonF=ImageTk.PhotoImage(BoutonFerme.resize(larg,haut))
            self.Etat="Ouvert"
            self.frame=Frame(Parent, width=larg,height=haut,bd=1,image=BoutonO)
            self.frame.bind("<Button-1>", self.bascule)
     
        def bascule(self):
            if self.Etat=="Ouvert":
                self.Etat="Fermé"
                self.frame.image=self.BoutonF
            else:
                self.Etat="Ouvert"
                self.frame.image=self.BoutonO
    Je place mon Inter dans une frame de ma fenêtre principale, et j'obtiens d'abord une petite fenêtre en plus (certainement le résultat de "root=Tk(), mais on verra plus tard) et ce message de IDLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      File "D:\Projets\Python\Télécommande\Mes_Objets.py", line 17, in __init__
        self.BoutonO=ImageTk.PhotoImage(BoutonOuvert.resize(larg,haut))
    AttributeError: 'PhotoImage' object has no attribute 'resize'
    Alors, comme promis, mes chaleureux remerciements, mais aussi un nouvel appel au secours, je rame !

    AMIcalement.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Salut,

    Citation Envoyé par L'AMI Yves Voir le message
    ce message de IDLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      File "D:\Projets\Python\Télécommande\Mes_Objets.py", line 17, in __init__
        self.BoutonO=ImageTk.PhotoImage(BoutonOuvert.resize(larg,haut))
    AttributeError: 'PhotoImage' object has no attribute 'resize'
    Le message vous dit juste que PhotoImage ne connaît pas "resize".
    Donc vous cherchez dans votre documentation tkinter préférée ce que sait faire PhotoImage et vous y trouver comment redimensionner une PhotoImage ou bien (puisque vous êtes pressé) un peu de recherche sur Internet.
    Est ce si compliqué?

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

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Bon, ouais, c'est sans doute pas si compliqué pour ceux qui sont déjà passé par là, mais avant de poster ce message, j'aifait (au moins !) dix aller-retour entre mon IDLE (où tourne le programme principal, mon éditeur (où je modifie ma classe) et Internnet, où, l'air de rien, je fais quand-même des recherches. Et si j'ai codé ces lignes, c'est bien par ce que je les ai trouvées sur Internet.

    O vous qui êtes programmeurs Python chevronés, vous ne vous rendez pas (plus ?) compte de ce que c'est que de se battre contre Python 2 ou Python 3, contre PIL qui a disparu (ou c'est tout comme) et Pillow (qu'il faut quand mêmee chercher sous le nom de PIL, par compatibilité (ah ah !), contre de myriades de tutos ou d'exemples complètement obsolètes, après toutes ces disparitions (mais ces tutos et ces exemples ne sont absolument pas datés), contre même notre imbécile d'"ami" Google, qui nous donne, certes, LA bonne réponse à notre question, mais noyée dans une foule d'autres réponses qui n'ont absolument rien à voir, si ce n'est qu'elles contienne un ou deux mots (dans le désordre) de notre question.

    Enfin, bon, ça y est, j'ai vidé mon sac, ça va mieux, je me calme, et je vous adresse (enfin !) tous les remerciements que méritent votre patience et votre amabilité, sans parler de la promptitude de vos réponses.

    AMIcalement (et à bientôt...)

Discussions similaires

  1. [prototype] gérer les événements dans une classe
    Par nawac dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/05/2010, 18h44
  2. Intercepter un événement dans une classe
    Par al_bert dans le forum C#
    Réponses: 3
    Dernier message: 03/03/2010, 16h45
  3. Ajout d'un évènement dans une classe
    Par marcaille dans le forum C#
    Réponses: 6
    Dernier message: 23/10/2009, 19h38
  4. Définir des événements dans une classe
    Par Masmeta dans le forum Windows Forms
    Réponses: 5
    Dernier message: 29/04/2008, 17h41

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