2010-06-22 2 views
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) 
+0

Это немного странно, поскольку вопрос очень специфичен для Блендера. Я посмотрю, есть ли какой-либо тег, который применяется. – unwind

+0

Почему код с двойным интервалом? Трудно читать. Кроме того, пожалуйста, отметьте домашнее задание как [домашнее задание] Это обязательно выглядит как домашнее задание. –

ответ

1

Это очень старый Blender (до Blender 2.5), и тогда это было практически невозможно. С текущим Blender (начиная с версии 2.5, в настоящее время в 2.67 на момент написания) вы можете решить эту проблему с помощью оператора модели, который запускает также события времени Python. Не так давно я ответил на другой вопрос: https://stackoverflow.com/a/16744008/2419030. Он дает простую структуру для такого модального оператора в текущем Blender, который также слушает события времени. Он также имеет связь с простой реализацией Conways Game of Life, выполняющейся как модальный оператор.

В вашем случае вы будете проверять значение поля ввода (вы можете создавать свои собственные панели, которые легко интегрируются в остальную часть блендера) и обновлять другие части, на которые вы хотите реагировать. В файле примера модальный обработчик выполняет один шаг моделирования. Вы заметите, что весь интерфейс остается отзывчивым.

В частности, вы выполняете проверки в обработчике model() под if-block «TIMER».

Чтобы создать панели (и другие формы скриптов), откройте текстовый редактор Blender и проверьте пункт меню «Шаблоны». Вы найдете огромное количество хороших вещей.

Смежные вопросы