2011-06-22 60 views
1

我已經問過這個問題,但它並沒有很好地闡述。在兩個wxpython標籤之間共享變量

persistence of objects in python

作爲一個新手到兩個Python和GUI編程

我有一個大的項目,該項目包含了一些Python文件。文件a.py定義了一個名爲fobject的類我正在使用python 2.5

文件b.py和c.py有一個名爲BProject和CProject的類,它們有一個fobject對象作爲參數。這些是基於wx python的程序中的頁面。

我已經包含在b.py中使用導入CProject(在c.py中定義)。我在CProject中使用wx python GUI填充了一個列表。接下來我調用在BProject中定義的函數BRun,它在內部調用CProject中的CRun函數,即。在c.py中。

在這個CRun中,我想操作列表,但列表總是空的。這是爲什麼?

我應該怎麼做給定的約束是我不能改變任何a.py中定義的fobject?

文件:c.py

def Instance(fObject): 
    return test_page_CProject(fObject) 


class CProject(object): 

    def __init__(self, fObject): 
     self.fObj = fObject 
     self.IntList = [] 
     ##snip 

    def OnIntSelectBtnPress(self,parent): 
     print ":self.IntList" 
     print self.IntList 
     self.listBoxIntSelect.InsertItems(self.IntList,0) 
     print self.IntList 

    def OnIntRun(self): 
     IntLModeList = self.IntListIntMode 
     #snip 

文件b.py

def Instance(fObject): 
    return BProject(fObject) 

class BProject(object): 

    def __init__(self, fObject): 
     self.FObj = fObject 
     #snip 
     Object = __import__('CProject') 
     #snip 

     self.intObject = Object.Instance(self.FObj) 
     self.intObject.OnIntRun() 

當CPython.OnIntRun被稱爲self.IntList是空的,當它should'nt是

回答

1

我並沒有很好地遵循這一點,但通常您需要在實例化類時傳遞數據。否則,可以使用PubSub在類之間傳遞信息,也可以創建一個簡單的本地Web服務器,每個選項卡定期檢查新數據並自行更新。

+0

我相信創建一個網絡服務器將是對這個應用程序的殺死。即使沒有網絡訪問,也需要在多臺PC上單獨安裝該應用程序,並且還要在客戶端執行我們的硬件。此應用程序與我們的主板進行交互。 –

+0

您可以使用Python的套接字模塊SimpleHTTPServer或SimpleXMLRPCServer在內存中創建服務器。我不是在說加載Apache或類似的東西。 –

+0

+1用於提示Pubsub – volting

0

如果你的fObject維護對bProject和cProject的引用,你能不能在你的fObject中寫一個send_to_c(msg)函數,你可以從你的bProject調用(反之亦然)?

+0

不幸的是,由於fObject在a.py中定義,並且對於許多平臺而言是共同的,因此我無法修改它。 –

+0

所以創建一個'class gObject(fObject)'(繼承自fObject)並將你的函數添加到gObject! – jozzas