Dans mon programme, il y a un calcul complexe qui nécessite que l'utilisateur évalue les résultats intermédiaires. Cela fonctionne bien dans une application de ligne de commande (à quoi ressemble mon code maintenant) car l'invite interactive interrompt l'exécution du programme jusqu'à ce que l'utilisateur tape Entrée. Le code de ligne de commande ressemble à ceci:Comment demander au code de procédure d'attendre que l'utilisateur saisisse une interface graphique avant de continuer?
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
Je voudrais fournir une interface plus intuitive que ce qui est possible avec la ligne de commande en utilisant une interface graphique et permettant à l'utilisateur de cliquer sur un bouton indiquant leur choix au lieu de . taper dans j'imaginer quelque chose comme ceci:
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
Est-il possible que je peux mettre en pause l'exécution du code de procédure qui fait les calculs, puis reprendre le code après que l'utilisateur clique sur un bouton? Je ne suis pas vraiment sûr de la façon d'élever ou de gérer des événements ici parce que normalement dans une interface graphique les callbacks de contrôle sont le point de départ de l'exécution du code, mais le code commence ailleurs et doit céder à l'interface graphique.
(Si cela fait une différence, je suis en utilisant Python et wxPython.)
C'est pas thread-safe * en général * - vous avez besoin d'une barrière de mémoire là-dedans quelque part pour s'assurer que l'écriture par le thread GUI avant 'flag = true' est visible pour le thread non-GUI * immédiatement * après' while (! flag); 'o Bien sûr, cela pourrait fonctionner, si vous avez de la chance, parfois, sur certaines plates-formes, peut-être comme python. –
Les lectures de mémoire sont généralement threadsafe, n'est-ce pas? Je ne comprends pas votre point, s'il vous plaît élaborer. – Grozz