我不确定这是否相关,但一些谷歌搜索显示PyQt在Maya中非常流行。您可以尝试使用此技术(此处) 或(此处) (在此处有源代码解释),通过Maya创建一个新的线程循环并在其中执行。似乎Maya包含了一个模块,可以设置一个新的线程对象,并在其中放置一个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是Maya的一个函数。)一定要查看如何在wxPython wiki上创建非阻塞GUI。在上面的(希望已经重新命名?)pumpQt函数中,您将想要设置一个事件循环并检查“Pending”事件,而不是processEvents()。 (wxPython源代码有一个Python实现的MainLoop。)可能应该通过app.Yield()函数来完成,但我不确定。
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()
应对当前事项清单。
祝你好运!