Передача переменных / функций между импортированными модулями - PullRequest
0 голосов
/ 29 июня 2010

Я собираюсь выбросить какой-нибудь псевдокод. Тогда объясни, чего я хочу, потому что я не уверен, как иначе.

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. Второй модуль имеет просмотр списка. Оба модуля импортируются в третий модуль. Мне нужно иметь возможность передавать информацию из поиска в listview_a в другом модуле. Я не уверен, как это сделать, поскольку все объекты объявлены в File_C, но мне нужно использовать их в File_A.

Ответы [ 2 ]

1 голос
/ 29 июня 2010

Используйте шаблон проектирования делегата : (Передайте panel_b в качестве аргумента при создании экземпляров объектов Panel_A):

# 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 голосов
/ 29 июня 2010

Можно использовать упрощенную версию шаблона Observer : класс Panel_A имеет поле listener с методом fillView, который получает список, Panel_B реализует такой метод.

После создания обоих Panel_A и Panel_B просто присвойте полю объекта Panel_A и вызовите self.listener.fillView(list) из onButton метода

...