关于 Blender 中的模态运算符 Python
About modal operators in Blender Python
我想制作一个程序,使用模态运算符在 Blender 的 Python.
中每 0.01 秒继续打印 ("test")
我也想按Esc键退出
我能做什么?
我编写并执行了以下代码,但 Blender 死机了。使用模态运算符似乎可以避免冻结,但我不确定如何使用它。
import time
import threading
#A function that keeps executing print ("test")
def worker():
while True:
print("test")
def schedule(interval, f, wait=True):
base_time = time.time()
next_time = 0
while True:
t = threading.Thread(target=f)
t.start()
if wait:
t.join()
next_time = ((base_time - time.time()) % interval) or interval
time.sleep(next_time)
#Execute worker function every 0.01 second
schedule(0.01, worker, False)
在 Blenders 文本编辑器中,您会找到一个名为 operator_modal_timer.py
的 python 模板,它可以按照您想要的方式工作。
对运算符的第一次调用是 execute()
方法,您可以在其中使用 wm.event_timer_add
创建计时器。然后在 modal()
方法中响应计时器事件或在收到 esc
键事件时取消运算符。
如果将运算符放在 an addon 中,则每次启动 blender 时都可以启用它。
我想制作一个程序,使用模态运算符在 Blender 的 Python.
中每 0.01 秒继续打印 ("test")我也想按Esc键退出
我能做什么?
我编写并执行了以下代码,但 Blender 死机了。使用模态运算符似乎可以避免冻结,但我不确定如何使用它。
import time
import threading
#A function that keeps executing print ("test")
def worker():
while True:
print("test")
def schedule(interval, f, wait=True):
base_time = time.time()
next_time = 0
while True:
t = threading.Thread(target=f)
t.start()
if wait:
t.join()
next_time = ((base_time - time.time()) % interval) or interval
time.sleep(next_time)
#Execute worker function every 0.01 second
schedule(0.01, worker, False)
在 Blenders 文本编辑器中,您会找到一个名为 operator_modal_timer.py
的 python 模板,它可以按照您想要的方式工作。
对运算符的第一次调用是 execute()
方法,您可以在其中使用 wm.event_timer_add
创建计时器。然后在 modal()
方法中响应计时器事件或在收到 esc
键事件时取消运算符。
如果将运算符放在 an addon 中,则每次启动 blender 时都可以启用它。