2010-06-29 84 views
0

我打算抛出一些伪代码。然后解释我想要的,因为我不知道如何以其他方式。在导入的模块之间传递变量/函数

File_A 
class Panel_A(wx.Panel) 
    def __init__(self): 
     button_a = wx.Button(parent=self) 

    def onButton(self, event): 
     pass to list view 

File_B 
class Panel_B(wx.panel): 
    def __init__(self): 
     listview_a = wx.ListView(parent=self) 

File_C 
import File_A 
import File_B 

panel_a = Panel_A() 
panel_b = Panel_B() 

好的,我在一个模块中有一个面板,当我按下button_a时搜索数据库。第二个模块有一个列表视图。两个模块都被导入第三个模块。我需要能够将搜索信息传递给另一个模块中的listview_a。我不知道如何做到这一点,因为所有的对象都是在File_C中声明的,但我需要在File_A中使用它们。

+0

一件事里面调用self.listener.fillView(list)。我正在使用wxGlade进行UI设计(该程序比这里显示的要复杂得多,几个面板,超过1000行gui代码)我将gui代码划分到我自己的模块中。因此,我不想混淆wxGlade生成的文件,因为我不得不访问对象构造。 – 2010-06-29 15:47:34

回答

1

使用delegate design pattern: (实例Panel_A对象时panel_b作为参数传递):

# File_A 
class Panel_A(wx.Panel) 
    def __init__(self,panel_b): 
     self.panel_b=panel_b 
     button_a = wx.Button(parent=self) 

    def onButton(self, event): 
     pass to self.panel_b.listview_a 

# File_B 
class Panel_B(wx.panel): 
    def __init__(self): 
     listview_a = wx.ListView(parent=self) 

# File_C 
import File_A 
import File_B 

panel_b = Panel_B() 
panel_a = Panel_A(panel_b) 

您可能要在刚刚的ListView传递,而不是整个面板。我不了解你的情况,不知道什么是最好的。

0

可以使用Observer pattern的简化版本:在Panel_A类有一个listener场与fillView方法获取列表中,Panel_B实现了这样的方法。

两个Panel_A和Panel_B建成后,只是分配给Panel_A对象的字段 从onButton方法等