如何让程序代码在继续之前等待GUI的用户输入?

时间:2010-10-19 12:45:07

标签: user-interface design-patterns language-agnostic

在我的程序中有一个复杂的计算,需要用户评估中间结果。这在命令行应用程序(这是我现在的代码看起来像)中运行良好,因为交互式提示会暂停程序执行,直到用户点击进入。命令行代码如下所示:

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

我希望通过使用GUI提供比命令行更直观的界面,并允许用户点击指示他们选择的按钮而不是输入。我想象的是:< / p>

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中恢复并从GUI恢复。

(如果它有所不同,我使用的是Python和wxPython。)

2 个答案:

答案 0 :(得分:2)

一般解决方案:

flag = false;

你的主题:

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

gui thread:

void OnInputEvent() { flag = true; }

答案 1 :(得分:1)

我不是python程序员,但一般来说这意味着你需要偶尔等待GUI线程,直到该线程收到用户的输入。

可能有一个更简洁,pythonesque api可用,但你当然可以使用raw python events