gpt4 book ai didi

python - 使用外部 GUI 库在 Autodesk Maya 中制作用户界面

转载 作者:太空狗 更新时间:2023-10-29 21:57:37 27 4
gpt4 key购买 nike

我在 Autodesk Maya 中开发工具。我构建的许多工具都有简单的窗口 GUI 供动画师和建模师使用。这些 GUI 通常包含您通常希望在任何基本窗口中看到的内容;标签、列表、菜单、按钮、文本字段等。但是,您可以使用可用工具构建的 UI 的复杂性存在限制,特别是在可用小部件的类型方面。

我有兴趣使用一些更高级的 wxPython 小部件,例如 ListView(网格)、树等。这将涉及使用完整的 wxFrame(窗口)来显示整个 UI,这实际上意味着该窗口将不再与 Maya 绑定(bind)。不会破坏交易,但这意味着当 Maya 最小化时,窗口不会随之最小化。

我之前用 tkinter 作为测试尝试过类似的东西,但发现它需要一个 MainLoop 才能在它自己的线程中运行。这是合乎逻辑的,但在我的例子中,它与 Maya 自己的线程冲突,基本上使 Maya 挂起,直到窗口关闭。这是因为 Maya 在主 Maya GUI 共享的单个线程中运行所有脚本,无论是 MEL 还是 Python。这是为了防止一个脚本删除一个对象,而另一个脚本正在尝试对同一对象进行操作。

wxPython 有同样的“mainloop”方法。我想知道是否有任何方法可以让它在 Maya 中工作?

最佳答案

我不确定这是否有关联,但谷歌搜索发现 PyQt 在 Maya 中非常流行。你可以试试这个技巧 herehere (用源代码解释了 here)通过 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 函数。)一定要查看如何创建 non-blocking GUI在 wxPython 维基上。代替 processEvents(),您需要设置一个事件循环并检查上面的(希望重命名?)pumpQt 函数内的“待定”事件。 (wxPython 源代码有一个 MainLoop 的 Python implementation。)这可能应该通过 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 文档 indicate SafeYield()是首选。同样,这似乎是第一步,但我不确定它是否会起作用,而不仅仅是可怕地崩溃。 (有一些关于你想在 wxPython mailing list 上做什么的讨论,但它来自 wx 之前的几个次要版本。)在各种论坛中也有一些迹象表明这种技术会导致键盘输入问题。您也可以尝试这样做:

def processor():
while app.Pending(): app.Dispatch()

处理当前的事件列表。

祝你好运!

关于python - 使用外部 GUI 库在 Autodesk Maya 中制作用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/397337/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com