У вас есть два объекта, которые должны общаться друг с другом, что является довольно стандартной проблемой коммуникации. Существует несколько способов решения этой проблемы:
(1) Внедрение зависимостей - Сделайте так, чтобы ваш класс MCUDP () требовал класса MCGUI во время построения.
Затем он будет доступен в любое время:
class MCUDP(object):
def __init__(self, gui): self.gui = gui
def UDPBroadcast(...):
# ... as necessary ...
self.gui.insertText("YourText")
class MCGUI(...)
def __init__( self, parent = None ):
self.udpClass = MCUDP.MCUDP(self)
Если вы сделаете это, ваш класс MCUDP станет зависимым от объекта, который реализует все методы self.gui
, которые использует MCUDP. Другими словами, MCUDP теперь напрямую связан с классом MCGUI. Конечно, класс MCGUI уже в некоторой степени зависит от MCUDP.
(2) Передача сообщений - In Qt, Сигналы и слоты. Идиоматический маршрут Qt использует сообщения вместо вызовов функций:
class MCGUI(...)
def __init__( self, parent = None ):
self.udpClass = MCUDP.MCUDP()
self.connect(self.udpClass, PYSIGNAL("textUpdated"), self.insertText);
И тогда вам просто нужно сделать класс MCUDP объектом QObject, чтобы он мог генерировать события:
class MCUDP(QObject):
def __init__(self, parent = None):
QObject.__init__(self, parent)
def UDPBroadcast(...):
# ... as necessary ...
self.emit(PYSIGNAL("textUpdated"), ("yourText",))
Преимущество этого теперь в том, что MCUDP не нужно ничего знать о классе MCGUI, что облегчит как тестирование, так и будущие изменения.