[python] předávání dat mezi framy ve wxPython

Leos Pol leos na radiante-corp.com
Pátek Prosinec 8 10:12:41 CET 2006


yoko na centrum.cz wrote:
> Zdravím všechny, chtěl bych Vás požádat o pomoc se zřejmě začátečnickým problémem, taky jsem začátečník :-)
> Situace(zjednodušeno): po spuštění programu se vytvoří frame1(wx.Frame) a načte data ze souboru. Po stisku tlačítka se otevře nový frame2(wx.Frame) ve kterém potřebuji tato data používat a modifikovat a po uzavření frame2 opět již modifikovaná data používat ve frame1. Mohli byste mi prosím poradit, jak si data mezi framy předávat? Napadá mě ve framu2 modifikovaná data uložit do souboru a po jeho uzavření je ve framu1 opět načíst ze souboru, ale to se mi jednak moc nelíbí a jednak stejně nevím, jak framu1 říct, aby po uzavření frame2 načetl soubor. Používám Python 2.5, wxPython 2.7 na WinXP. Za pomoc předem moc děkuju. Petr
>
>   
Ahoj,
nejprve bych chtel podotknout, ze wxPython-2.7 je development branch, 
takze doporucuji pouzivat verzi 2.6.
K tvemu problemu. Myslim si, ze je spousty zpusobu, jak toto provest a 
zalezi take trosku na tom, jak vse resis. Pravdepodobne mas ve fci 
obsluhujici udalost EVT_BUTTON vytvoreni frame2 a jeho zobrazeni. Pak 
pred tim, nez zavolas frame2.ShowModal() nebo jen frame2.Show() vytvor 
novou promennou ve frame2, ktera bude obsahovat data z frame1. Cele by 
to mohlo vypadat asi takhle:

    def OnButtonClick(self, evt):
        frame2 = Frame2(None, -1)
        frame2.data = self.data     # self je v tomto pripade instance
    of tridy Frame1 a data jsou data, ktere frame1 nacetl
        frame2.ShowModal()

Mozna jeste snazsi zpusob je ten, ze definujes frame1 jako parent pro 
frame2. Nasledne pak budes mit instanci tridy Frame1 v konstruktoru 
Frame2. V kodu pak asi takhle:

    def OnButtonClick(self, evt):
        frame2 = Frame2(self, -1)
        frame2.ShowModal()

    class Frame2(wx.Frame):
        def __init__(self, parent):
           wx.Frame.__init__(self, id = -1, parent = parent)
           self.data = parent.data     # nebo take self.parent = parent,
    pak jsou data v self.parent.data

Doufam, ze jsem trosku pomohl.
Leo            

-- 
----
Leos Pol
SW Engineer
Radiante Corp.

If it can be imagined,
we can implement it



Další informace o konferenci Python