在导入模块之间传递变量/函数
我想先给出一些伪代码,然后再解释我想要的,因为我不太确定该怎么说。
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()
好的,我在一个模块里有一个面板,当我按下按钮_a 时,它会搜索数据库。第二个模块里有一个列表视图。两个模块都被导入到第三个模块里。我需要把搜索到的信息传递到另一个模块里的列表视图_a。我不太确定该怎么做,因为所有的对象都是在文件_C 中声明的,但我需要在文件_A 中使用它们。
2 个回答
0
你可以使用一种简化版的观察者模式:Panel_A 类里面有一个 listener
字段,这个字段有一个 fillView
方法,用来获取列表,而 Panel_B 则实现了这个方法。
在创建好 Panel_A 和 Panel_B 之后,只需要把 Panel_A 对象的字段赋值,然后在 onButton
方法里面调用 self.listener.fillView(list)
就可以了。
1
使用委托设计模式:在创建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,而不是整个面板。我对你的具体情况了解不够,所以不太清楚哪种方式更好。