[wxpython] procedurale o OOP?

Messaggioda mic_1 » 05/02/2020, 19:34

Ciao a tutti!!!

Ho trovato un intoppo al mio progetto che ora vi descrivo:

Ho creato una finestra con dei TAB. Ogni tab è suddiviso in due sezioni verticali:
- A -> visualizzazione immagine distribuzione
- B -> tasti per FitLine e FitPowerLaw

Alla pressione del tasto viene aperta la finestra della elaborazione su scatter.

Mi chiedevo...e chiedo soprattutto a voi perchè non lo so :-D E' possibile inserire l'immagine ottenuta da B ad A anche se essendo procedurale indietro non si torna? Come posso risolvere? Devo per forza modificare il codice portando da procedurale ad oggetti???? :?: :?:

Sono veramente preoccupata perchè non so quante modifiche debba fare....

C'è un modo semplice per risolvere questo inghippo????? GRAZIE! Sono preoccupata...
Ultima modifica di mic_1 il 06/02/2020, 12:17, modificato 1 volta in totale.
mic_1
Junior Member
Junior Member
 
Messaggio: 154 di 160
Iscritto il: 11/01/2011, 18:11

Re: [wxpython] procedurale o OOP?

Messaggioda mic_1 » 05/02/2020, 20:08

... da ignorante.... chiedo...

se facessi un controllo in A sull'evento bottone B e un refresh.. potrei risolvere ???

Ho provato ieri a cercare qualcosa su refresh() ma non saprei come usarlo...

Consigli??? Ne avrei proprio bisogno!!! Grazie!!!!
mic_1
Junior Member
Junior Member
 
Messaggio: 155 di 160
Iscritto il: 11/01/2011, 18:11

Re: [wxpython] procedurale o OOP?

Messaggioda Raptorista » 07/02/2020, 10:51

Ciao, senza vedere codice non è facile dare una risposta, soprattutto perché non ho mai usato wxpython, ma ci provo comunque. Tutto ciò che segue, quindi, è "assumendo che abbia interpretato correttamente il tuo messaggio".
mic_1 ha scritto:E' possibile inserire l'immagine ottenuta da B ad A anche se essendo procedurale indietro non si torna? Come posso risolvere? Devo per forza modificare il codice portando da procedurale ad oggetti???? :?: :?:

Teoricamente esiste un modo procedurale di fare la cosa, ma non è detto che sia pratico.
Forse basta che tu conservi, nel frame che contiene B, una copia dell'oggetto che in A visualizza l'immagine e, tramite la sua interfaccia, gli passi la nuova immagine da visualizzare.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5392 di 5417
Iscritto il: 28/09/2008, 19:58

Re: [wxpython] procedurale o OOP?

Messaggioda mic_1 » 11/02/2020, 11:32

Vi riporto una parte di codice. L'image viene visualizzata, non in trasparenza, nella class B e non A.
Grazie

Codice:
class A(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        sizer = wx.BoxSizer()
        sizer.Add(self, 1, wx.EXPAND)
        self.Parent.SetSizer(sizer)
        self.Distrib_CLCentr()   #funzione richiamata con image
        buf = io.BytesIO()
        plt.savefig(buf, format = 'png', dpi=100)
        buf.seek(0)
        plt.close()
        self.sizer = wx.BoxSizer(wx.HORIZONTAL)

        if wx.UpdateUIEvent.CanUpdate(self):
            self.UpdateWindowUI(wx.UPDATE_UI_FROMIDLE)
            print('print1')
            self.Image1 = wx.Image(buf2, wx.BITMAP_TYPE_ANY)
            self.Image2 = wx.StaticBitmap(self, wx.ID_ANY, wx.Bitmap(self.Image1))
            self.sizer.Add(self.Image2, 1, wx.ALIGN_CENTRE)
            self.sizer.Add(self.Image, 1, wx.ALIGN_CENTRE)
        else:
            self.Image = wx.Image(buf, wx.BITMAP_TYPE_ANY)
            self.Image = wx.StaticBitmap(self, wx.ID_ANY, wx.Bitmap(self.Image))
            self.sizer.Add(self.Image, 1, wx.ALIGN_CENTRE)
        self.SetSizer(self.sizer)

class B(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.Button()   # uno dei pulsanti richiama all'evento la funzione OnFit che genera la seconda image che vorrei sovrapporre in trasparenza alla prima image. Ce ne sarà poi un'altra da sovrapporre allo stesso modo.

    def OnFit(self, event):
        global buf2, eid, Image1
        eid = event.GetId()
        ....... #codice di calcolo
        self.fig, self.ax = plt.subplots()
        self.fig.set_size_inches(15, 10)
        self.ax.scatter(xCL, yCL, alpha=0.6) 
        self.ax.plot(xdata , np.polyval(p1, xdata) ,'r-')
        self.ax.set(xlabel='Number of Neighbors', ylabel='Closeness Centrality')
        self.ax.yaxis.grid(linestyle='--')
        self.xticks = ([0, 1, 10, 100, roundup(max(xCL), n = 2)])
        self.yticks = list(frange(0.000, roundup2(float(max(yCL)))+0.025, 0.025))
        self.yticks_ = np.around(self.yticks, 4)
        self.ax.set_xticks(self.xticks)
        self.ax.set_yticks(self.yticks_)
        self.ax.set_xticklabels(self.xticks, fontsize=8) #per stabilire un intervallo uso np.arange()
        self.ax.set_yticklabels(self.yticks_, fontsize=8)
        buf2 = io.BytesIO()
        plt.savefig(buf2, format = 'png', dpi=100) #, bbox_inches='tight')
        buf2.seek(0)
        if wx.UpdateUIEvent.CanUpdate(self):
            self.UpdateWindowUI(wx.UPDATE_UI_FROMIDLE)
            plt.close()
            A(self) 
mic_1
Junior Member
Junior Member
 
Messaggio: 156 di 160
Iscritto il: 11/01/2011, 18:11

Re: [wxpython] procedurale o OOP?

Messaggioda mic_1 » 26/02/2020, 13:42

Purtroppo non sono riuscita a trovare la soluzione. Qualche consiglio??? Non per mettere fretta a nessuno ma avrei urgenza. grz
mic_1
Junior Member
Junior Member
 
Messaggio: 158 di 160
Iscritto il: 11/01/2011, 18:11

Re: [wxpython] procedurale o OOP?

Messaggioda Raptorista » 27/02/2020, 13:35

Purtroppo da quel codice non si capisce granché. Per caso il repository è su GitLab o simili? Magari potendo eseguire il codice si capisce meglio.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5405 di 5417
Iscritto il: 28/09/2008, 19:58

Re: [wxpython] procedurale o OOP?

Messaggioda mic_1 » 16/03/2020, 13:48

No, solo wxpython.

Dal codice ho tolto solo parti di calcolo... niente che possa ostacolarne la comprensione.

Codice:
if wx.UpdateUIEvent.CanUpdate(self):
            self.UpdateWindowUI(wx.UPDATE_UI_FROMIDLE)


Mi permette di inserire l'image nel tab ma lo inserisce nel tab della classe 2-B e non nella tab della classe 1-A

Cosa sbaglio? come dev'essere usato? c'è un modo più semplice per ottenere il risultato?
Ho salvato l'image in trasparenza inserendo l'apposito parametro in plt.savefig() ma io non vedo nulla...

Inoltre avrei bisogno di distribuire l'asse x : l'ho suddivisa in 0, 10, 100, 700 ma vorrei che queste suddivisioni siano equidistanti tra loro. come fare?
Grazie!
mic_1
Junior Member
Junior Member
 
Messaggio: 159 di 160
Iscritto il: 11/01/2011, 18:11


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti