Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : héritage de wxObject et polymorphisme ?? [ Divers / Débutant(e) ] (RV2931)

mardi 19 février 2008 à 20:06:08 | héritage de wxObject et polymorphisme ??

RV2931

Bonjour,

Je programme en wxPython et j'aurai voulu savoir comment dériver un objet wx pour faire un bouton personalisé par exemple, avec des informations supplémentaires, mais qu'ils soit quand même pris pour un bouton normal lorsque je lui applique des bindings car, lorsque l'on fait ça :

class MonBouton(wx.button):
    def __init__(self):
       wx.bouton(args)
       self.mySupInfo="InfoSupplémentaire"

et qu'en suite je fais un binding
MyBut=MonBouton()
MyBut.Bind(wx.EVT_BUTTON,MyFunc)

Il me dit quelque chose du genre
wxWindow expected (MonBouton) received

Le polymorphisme n'existe pas en python ?? ou bien n'est-il pas implémenté pour les objets wxPython ?? Y a-t-il moyen de forcer l'interprêteur à le prendre en tant que wx.Button (cast en C)???

Sinon, comment puis-je récupérer les bindings originaux de mon objet wx.button pour pouvoir gérer les évênements comme normalement avc ma propre classe.

J'ai pensé éventuellement à faire ça :

class MonBouton(wx.button):
    def __init__(self):
       self.orig=wx.bouton(args)
       self.mySupInfo="InfoSupplémentaire"

MyBut=MonBouton()
MyBut.orig.Bind(wx.EVT_BUTTON,MyFunc)

Cela fonctionne surement mais je ne trouve pas ça joli, super propre, un peu bidouille. Je viens du C++ et quand j'hérite d'une, j'hérite réellement d'une classe, et de tout ce qui va autour, comment puis-je faire ça en python ????

Merci

RV

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"

mercredi 20 février 2008 à 10:31:50 | Re : héritage de wxObject et polymorphisme ??

laurent1024

Bonjour.
C'est surement car Bind n'est pas une méthode de wxButton (je ne connais pas beaucoup wxpython). Dans les exemples qu'il y a sur le net c'est la classe Frame qui utilise les binds :

class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.pnl = wx.Panel(self)
self.label_1 = wx.StaticText(self.pnl, -1, " Fichier source")
self.button_1 = wx.Button(self.pnl, -1, "Parcourir")
self.text_ctrl_1 = wx.TextCtrl(self.pnl, -1, "")
self.label_2 = wx.StaticText(self.pnl, -1, " Garder une ligne sur")
self.label_5 = wx.StaticText(self.pnl, -1, "..................")
self.text_ctrl_2 = wx.TextCtrl(self.pnl, -1, "")
self.label_3 = wx.StaticText(self.pnl, -1, " Fichier destination")
self.button_2 = wx.ToggleButton(self.pnl, -1, "Auto")
self.text_ctrl_3 = wx.TextCtrl(self.pnl, -1, "")
self.label_4 = wx.StaticText(self.pnl, -1, " Etat")
self.button_3 = wx.Button(self.pnl, -1, "Go")
self.label_6 = wx.StaticText(self.pnl, -1, " Cutline 1.0")
 
self.__set_properties()
self.__do_layout()
 
self.Bind(wx.EVT_BUTTON, self.parcourir, self.button_1)
self.Bind(wx.EVT_TOGGLEBUTTON, self.auto, self.button_2)
self.Bind(wx.EVT_BUTTON, self.go, self.button_3)
 
 
self.compteur=0
# end wxGlade


mercredi 20 février 2008 à 10:54:27 | Re : héritage de wxObject et polymorphisme ??

aera group

Réponse acceptée !

Rien de bien compliqué :

import wx

class Mon_Bouton(wx.Button):
    def __init__(self,panel,texte,info):
        wx.Button.__init__(self,panel,-1,texte)
        self.info = info

    defaffiche_info(self):
        return self.info


class Frame(wx.Frame):
    def__init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title,size=((200, 150)))

        panel = wx.Panel(self)

        text=wx.StaticText(panel, -1, "Bonjour tout le monde")      
        self.bouton = Mon_Bouton(panel, "Afficher les infos du bouton",\
                                            "Des infos suplémentaire")

        self.Bind(wx.EVT_BUTTON, self.info, self.bouton)
       
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(text, 0, wx.ALL|wx.CENTER, 10)
        sizer.Add(self.bouton, 0, wx.ALL|wx.CENTER, 10)

        panel.SetSizer(sizer)
        panel.Layout()

        self.Centre()

    definfo(self, evt):
        print self.bouton.affiche_info()

class MyApp(wx.App):
    defOnInit(self):
        frame = Frame(None, "Test")
        self.SetTopWindow(frame)

        frame.Show(True)
        return True
       
app = MyApp(True)
app.MainLoop()

Voila, il suffit de respecter la syntaxe des classes sous Python (rien à voir avec WxPython ton problème), quand tu dérive une classe, la première ligne de la fonction __init__ doit être Nom_Class_Dérivé.__init__(self,Arg) ! C'été juste ça !
______
Aéra




Cette discussion est classé dans : bouton, button, self, wx, monbouton


Répondre à ce message

Sujets en rapport avec ce message

Comment lancer son application !!!!!!!!!! [ par steede ] Voila, j'ai écrit (pompé) une malheureuse app (extraite d'un exemple "simple" de wx) et j'aimerais la faire fonctionner !!!!ci dessous la ligne de la Socket : charger ip depuis fichier [ par Shinji ] Bonjour @ ttes et @ ts, voici mon pb:  j'essaye de faire une petite app client/serveur et j'aimerais pouvoir enregister l'ip/port du serveur dans un Class has no attribute !?!? [ par RV2931 ] BonjourJ'ai récupéré un petit programme "Hello world" d'un tuto wxPython de développez.com que voici :# !/usr/bin/python#  -*- coding: iso885915 -*-im Récupérer la valeur choisie dans une liste déroulante [ par amaury74 ] Bonjours à tous,Ma question peu paraitre bête mais je n'ai pas trouvé de réponse claire.Voila: j'ai programmé une interface graphique avec wx.Python. Comment Afficher les donnes d'une BD dans WXGRID ??? [ par medmst ] slt a tousmon probleme est .. comment afficher les donnees d'un bd dans WXGRID ???mon code-source est : pas d'erreur de compilation mé il n'affiche ri wxBoxSizer [ par Vonscott ] Salut à tous,Ceci est mon tout premier POST sur le forum ( mais certainement pas le dernier )Jusque la, je travaillais sous PHP/MySQL et j'ai voulu dé [QT4][python]probleme menu bouton [ par tsic ] salut,Mon interface client a un menu et un boutton (au debut non actif) .à la connexion j'ai ajouter la ligne suivante:"self.ui.bouton_env.setEnabled( Diverses questions et precision [ par sheorogath ] Bonjour,je me remets au python mais plus serieusement cette fois ci :palors j'ai plusieurs question sur des choses sur lesquels je trouve que peux d'i griser des textCtrl sous wx [ par mataxa ] Je veux faire un petit programme qui fais l'analyse de 4 valeur. Mais j'ai besoin de faire 4 teste distinct et j'aimerais blocquer les valeur suivant connexion python [ par tsic ] Bonjour, Voilà, j'ai débuté recemment avec python et je veux faire une connexion client serveur (windows) par l'intermédiaire d'une interface QT Desig


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.