Если вы хотите легко вызвать этот SOAP WS с PHP, я настоятельно рекомендую вам использовать генератор WSDL to PHP, так как это упростит построение запроса и обработку запросов с использованием подхода ООП, который всегда лучше. [111 ]
Кроме того, использование хорошей IDE, адаптированной к PHP, такой как PhpStorm или Eclise PDT, является минимальным требованием для легкого использования сгенерированного PHP SDK благодаря автозаполнению.
Я бы посоветовал вам попробовать проект PackageGenerator , который довольно завершен и использует композитор.
Я не уверен, релевантно ли это, но некоторый поиск с помощью Google поднимается, тот PyQt довольно популярен в языке майя. Вы могли попробовать технику здесь или здесь (объясненный здесь с исходным кодом) создания нового threadloop через язык майя и выполнение в этом. Это кажется майя, включали модуль, который настраивает объект нового потока с QApplication в нем:
def initializePumpThread():
global pumpedThread
global app
if pumpedThread == None:
app = QtGui.QApplication(sys.argv)
pumpedThread = threading.Thread(target = pumpQt, args = ())
pumpedThread.start()
и затем настраивает функцию для обработки событий Qt:
def pumpQt():
global app
def processor():
app.processEvents()
while 1:
time.sleep(0.01)
utils.executeDeferred( processor )
Можно, вероятно, сделать что-то похожее с wxPython также. (utils.executeDeferred функция майя.) Убедиться проверить, как создать не блокирующийся GUI на wxPython wiki. Вместо processEvents (), Вы захотите настроить цикл событий и проверку на события "Pending" в (надо надеяться, переименованный?) pumpQt функционируют выше. (wxPython источник имеет реализацию Python MainLoop.), Вероятно, это должно быть сделано через приложение. Урожай () функция, но я не уверен.
def pumpWx():
global app
def processor():
app.Yield(True)
while 1:
time.sleep(0.01)
utils.executeDeferred( processor )
def initializePumpThread():
global pumpedThread
global app
if pumpedThread == None:
app = wx.App(False)
pumpedThread = threading.Thread(target = pumpWx, args = ())
pumpedThread.start()
wxPython документы указывают, что SafeYield () предпочтен. Снова, это кажется, что мог быть первый шаг, но я не уверен, что это будет работать и не просто отказывать ужасно. (Существует некоторая дискуссия о том, что Вы хотите сделать в wxPython списке рассылки, но это от нескольких вспомогательных версий несколько wx назад.) Существует также некоторый признак на различных форумах, что эта техника вызывает проблемы с вводом с клавиатуры. Вы могли бы также попытаться делать:
def processor():
while app.Pending(): app.Dispatch()
иметь дело с текущим списком событий.
Удачи!
Я не знаю, существует ли путь вокруг mainloop для gui, так как необходимо обработать все цепочки события и очереди перерисовки.
Но существует несколько средств межпроцессного взаимодействия, как каналы или семафоры. Возможно, это - опция разделить Ваше расширение майя на фактический плагин, будучи трудным на язык майя и отдельное приложение для gui. Эти два могли использовать такие средства передать и обмениваться информацией модели между плагином и gui. Я не уверен, однако, если я могу действительно рекомендовать этот подход, потому что он очень усложняет приложение.
Вы могли взглянуть на IPython, интерактивную оболочку Python, команда разработчиков которой приложила некоторые усилия к интеграции его с wxPython. У них есть некоторый способ прервать цикл событий и сцепиться в него, чтобы сделать их собственный материал.