Как заставить процедурный код ждать ввода пользователя из графического интерфейса, прежде чем продолжить? - PullRequest
0 голосов
/ 19 октября 2010

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

def calculate(starting):
    result1 = initial_calculation(starting)
    user_input1 = input("What is your choice for " + result1 + "?")
    result2 = calculate1(user_input1)
    user_input2 = input("What is your choice for " + result2 + "?")
    result2 = calculate2(user_input2)
    #...etc

Я хотел бы предоставить более интуитивно понятный интерфейс, чем это возможно с командной строкой, используя графический интерфейс пользователя и позволяя пользователю нажимать кнопку, указывающую их выборвместо того, чтобы вводить его. Я представляю что-то вроде этого:

def do_something(starting):
    result1 = initial_calculation(starting)
    #wait for user to press a button indicating their choice?
    result2 = calculate1(clicked_button.user_input1)

    label.text("What is your choice for " + result1 + "?")
    #wait for user again
    result2 = calculate2(clicked_button.user_input2)
    #...etc

Есть ли способ приостановить выполнение процедурного кода, который выполняет вычисления, а затем возобновить код после того, как пользователь щелкнеткнопка?Я не совсем уверен, как вызывать или обрабатывать события здесь, потому что обычно в GUI контрольные обратные вызовы являются отправной точкой для выполнения кода, но здесь код начинается в другом месте и должен уступать и возобновлять работу из GUI.

(Если это имеет значение, я использую Python и wxPython.)

Ответы [ 2 ]

2 голосов
/ 19 октября 2010

Общее решение:

flag = false;

ваша тема:

while (!flag); // wait here, consume cpu doing nothing

тема интерфейса:

void OnInputEvent() { flag = true; }
1 голос
/ 19 октября 2010

Я не программист на Python, но в целом это означает, что вам придется время от времени ждать поток GUI, пока этот поток не получит ввод от пользователя.Python-интерфейс доступен, но вы можете использовать raw python events .

...