Я создаю API, который я хотел бы использовать в приложениях, использующих pyqt и другие приложения.
Если программист использует графический интерфейс, отличный от Qt, я не хочу, чтобы она импортировала pyqt и т. Д.
Моя проблема в том, что я использую задачу, чтобы подписаться на сообщения и передать их основной задаче.
Я выполняю это, передавая параметр (qt), который имеет значение True или False в зависимости от того, какой графический интерфейс мы реализуем.
Затем я создаю класс, который генерирует класс SubscriberParent из QtCore.QThread или Thread. Конечная подпискаThread
имеет тип SubscriberThreadParent.
Основной поток либо опрашивает interTaskQueue, либо использует сигналы и слоты Qt для обработки сообщения.
class Gui(object):
def __init__(self, qt):
if qt:
from PyQt5 import QtCore
from PyQt5.QtCore import Qt, pyqtSignal
class SubScriberThreadParent(QtCore.QThread):
def __init__(self):
QtCore.QThread.__init__(self)
else:
from threading import Thread
class SubScriberThreadParent(Thread):
def __init__(self):
Thread.__init__(self)
class SubscriberThread(Gui.SubScriberThreadParent):
def __init__(self, qt, dsParam, SubScriberThreadParent):
if qt:
from PyQt5 import QtCore
from PyQt5.QtCore import Qt, pyqtSignal
pubIn = pyqtSignal(str, str)
SubScriberThreadParent.__init__(self)
self.interTaskQueue = dsParam.interTaskQueue
.
.
.
.
#
# Pass the message on to the main application
#
def alertMainApp(self, bodyTuple):
if self.qt:
btz = '{0}'.format(bodyTuple)
self.pubIn.emit(btz)
LOGGER.info("Emitted Alert ")
else:
if self.interTaskQueue != None:
self.interTaskQueue.put(bodyTuple) # Pass it to the main thread
LOGGER.info("Queued Alert.")
else:
LOGGER.error("No Inter-task data transfer method available to the subscriber task!")
Ошибка, которую я получаю при таком подходе: «AttributeError: тип объекта« Gui »не имеет атрибута« SubScriberThreadParent »»
Как я могу сделать эту работу?
Я также хотел бы знать объем условного импорта.