Я задал этот вопрос, но он был не очень хорошо сформулирован.
Как новичок для программирования на языке python и GUI
У меня большой проект, содержащий несколько файлов python. Файл a.py определяет класс, называемый fobject. Я использую python 2.5
В файлах b.py и c.py есть классы, называемые BProject и CProject, которые имеют объект fobject в качестве параметра. Это страницы в программе на основе wx python.
Я включил использование import CProject (определенный в c.py) в b.py. У меня есть список в CProject, который я заполняю с помощью wx python GUI. Затем я вызываю функцию BRun, определенную в BProject, которая внутренне вызывает функцию CRun в CProject, т.е. в 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 пуст, когда он не должен быть
Я не очень хорошо это понимаю, но обычно вам нужно передать данные, когда вы создаете экземпляр класса. В противном случае вы можете использовать PubSub для передачи информации между классами, или вы можете создать простой локальный веб-сервер, который каждая вкладка периодически проверяет на наличие новых данных и обновлений.
Если ваш fObject поддерживает ссылки на bProject и cProject, вы не могли бы написать функцию send_to_c(msg)
в вашем fObject, которую вы могли бы вызвать из вашего bProject (и наоборот)?
class gObject(fObject)
(наследует от fObject) и добавьте свои функции в gObject!