begin process at 2010 09 04 18:48:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Python

 > 

Divers

 > 

Débutant(e)

 > 

héritage de wxObject et polymorphisme ??


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

héritage de wxObject et polymorphisme ??

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ée 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 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 Fenetre + menu + bouton pour un débutant [ par Yachas ] Bonjour, Je débute entièrement dans Python et tente de créer une simple application avec « wxPython » Je suis désolé de vous déranger pour des choses 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 Aide pour acquisition d'une pression [ par sebfluo ] Bonjour a tous.Je suis entrain de réaliser un petit programme avec une interface graphique(réalisée avec QT designer et PyQT) permettant d'acquérir un 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( classe abstraite [ par oxkao ] bonjours,voili voilou je me suis mis à python et je pensais (en tant que langage objet) retrouver les mêmes principe qu'en C++ ou java je cherche donc


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales