0

我在搅拌机中有一个 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)
4

1 回答 1

1

这是非常古老的 Blender(Blender 2.5 之前的版本),当时几乎不可能做到这一点。使用当前的 Blender(从 2.5 系列开始,在撰写本文时当前为 2.67),您可以使用模型运算符解决这个问题,该运算符也触发 Python 时间事件。不久前,我在这里回答了另一个 SO 问题:https ://stackoverflow.com/a/16744008/2419030 。它为当前 Blender 中的这种模态运算符提供了一个简单的结构,它也监听时间事件。它还有一个链接,指向作为模态运算符运行的简单 Conways Game of Life 实现。

在您的情况下,您将检查输入框的值(您可以创建自己的面板,无缝集成到搅拌机的其余部分)并更新您想要对其做出反应的其他部分。在示例文件中,模态处理程序执行模拟的一个步骤。您会注意到整个界面保持响应。

具体来说,您将在“TIMER”if 块下的 model() 处理程序中进行检查。

要创建面板(和其他形式的脚本),请打开 Blender 文本编辑器并检查 Templates 菜单条目。你会发现大量的好东西。

于 2013-06-03T10:44:18.147 回答