我在blender中有一个gui接口,以下应该是用户的场景:
按下“运行”按钮后,用户可以在输入文本框中输入句子,这样每个句子都应以点''结束。然后,如果用户输入一个句子,则应清除输入框,输入的句子应显示在输出文本框中。
问题出现在以下代码部分:
while 1:
input = Textbox1.val
if input.__contains__('.'):
Textbox1.val = ''
Textbox2.val = input
以下是我的所有代码:
import Blender
from Blender.BGL import *
from Blender.Draw import *
def draw_gui():
global Textbox1, Textbox2
Textbox1 = Create('input')
Textbox2 = Create('output')
glClearColor(0.753, 0.753, 0.753, 0.0)
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(0.000, 0.000, 0.627)
glRecti(20, 150, 730,500)
Button('Exit', 1, 450, 220, 87, 31)
Button('Quit', 2, 350, 220, 87, 31)
Button('Run', 3, 250, 220, 87, 31)
Textbox1 = String('', 4, 50, 400, 650, 50, Textbox1.val, 399, '')
Textbox2 = String('', 4, 50, 300, 650, 50, Textbox2.val, 399, '')
def event(evt, val):
if (evt==QKEY and not val): Exit()
def bevent(evt):
if evt == 1: #cmdExit
Exit()
elif evt == 2 : #cmdQuit
Blender.Quit()
elif evt == 3 : #cmdRun
########################### from here the problem starts
while 1:
input =Textbox1.val
if input.__contains__('.'):
Textbox1.val=''
Textbox2.val=input
#################### and here is the end of it
Blender.Redraw()
Register(draw_gui, event, bevent)
答案 0 :(得分:1)
这是非常古老的Blender(前Blender 2.5),当时几乎不可能做到这一点。使用当前的Blender(自2.5编写以来,截至撰写本文时为2.67),您可以使用也在Python时间事件上触发的模型运算符来解决此问题。不久前,我在这里回答了另一个问题:https://stackoverflow.com/a/16744008/2419030。它为当前Blender中的这种模态运算符提供了一个简单的结构,它也可以监听时间事件。它还有一个链接到一个简单的Conways Game of Life实现,作为模态运算符运行。
在您的情况下,您将检查输入框的值(您可以创建自己的面板,无缝地集成到其余的搅拌机中)并更新您想要对其作出反应的其他部分。在示例文件中,模态处理程序执行模拟的一个步骤。您会注意到整个界面都保持响应。
具体来说,您将在'TIMER'if-block下的model()处理程序中进行检查。
要创建面板(和其他形式的脚本),请打开Blender文本编辑器并检查“模板”菜单条目。你会发现很多好东西。