我正在使用 Python 为 Blender 开发一个插件,需要用户进行一些确认。 我已经为 Windows 编写了一个工作代码,如下所示:
from ctypes import *
user32 = windll.user32
Answer = user32.MessageBoxW(None, 'some question here', 'title', 4 | 0x40)
if Answer==6:
print('You choose YES')
else:
print('You choose NO')
不幸的是(显然),它在 Linux 中不起作用。 我了解到使用 Tkinter 可能是一种解决方案,但它尚未安装在 Linux 上,我更喜欢使用之前不需要安装包的解决方案。
有人提出 Linux(或跨平台)解决方案吗?
谢谢
最佳答案
blender 的默认安装不包括 python 的整个默认构建。打包 blender 版本以供分发时,排除了 python 模块列表(包括 tkinter)。您可以找到确切的列表 here .您可能对一些可用的窗口管理器方法感兴趣,例如 this example 中使用的 invoke_props_dialog
,但总的来说,这些并不是您应该采用的方式。
有两种常见的方法可以从用户那里获取可变输入。第一个是用户可以根据自己的选择进行调整的属性,然后在运行脚本时使用。另一种方法是通过运算符属性。
属性可以be added到一些现有的类并显示在 panels 中供用户编辑。
Blender 中执行的操作(例如当用户按下某些键、单击按钮或选择菜单项时)由运算符(operator)执行。运算符通常具有可改变其操作结果的属性。例如,当您添加一个 UV 球体并按 F6 时,您可以调整该球体的几何体量以及它的大小和位置。这些属性也位于工具架区域的底部。
如图this example ,您可以将属性添加到运算符的类中,并且用户可以像在 UV 球体示例中一样调整这些属性。您还可以指定在放置按钮供用户单击时使用的值 -
def draw(self, context):
row = self.layout.row()
row.operator('object.example_operator', text='go with 6').choice = 6
关于python - Linux 中的消息框(开箱即用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37249277/