2010-06-29 3 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

Еще одна вещь. Я использую wxGlade для дизайна пользовательского интерфейса. (Программа намного сложнее, чем показано здесь, несколько панелей, более 1000 строк gui-кода). Я подклассифицирую код gui в свои собственные модули. Поэтому я не хочу связываться с создаваемыми файлами wxGlade больше, чем мне, поэтому у меня нет доступа к конструкции объекта. –

ответ

1

Используйте delegate design pattern: (Pass в 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

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

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

Смежные вопросы