2017-11-19 4 views
0

Ich versuche, eine Schaltfläche zu machen, die den Loop anhalten und fortsetzen kann.Python Pause/Fortsetzen Button

In Code:

for index in range(10): 
    print index 
    // Runs until here, and pause 
    // Button pressed 
    print index + 10 
    // Runs until here, and pause 
    // Button pressed 

Im Terminal:

0 
// Button pressed 
10 
// Button pressed 
1 
// Button pressed 
11 
... 
9 
// Button pressed 
19 
// Button pressed 

Gibt es eine Möglichkeit, dass ich Pause machen kann und die Schleife mit einer Taste wieder aufnehmen?

+0

Ich bin verwirrt über das, was ihr bittet. Möchten Sie, dass die for-Schleife auf das Drücken einer Taste wartet, bevor Sie fortfahren? – James

+0

@James Ja, genau. –

+0

Long-Running-Schleife in jedem GUI-Framework macht ein Problem, weil es seinen Hauptschleife (Ereignisschleife) stoppt und es scheint, als ob es auflegen. Das Hauptproblem ist also, wie man es ausführt und nicht Hauptschleife stoppt. Wenn Sie es im zweiten Thread ausführen, können Sie 'while first_time_pressed == False: pass' verwenden, um die Schleife zu stoppen, und Button im Haupt-Thread würde' first_time_pressed = True', 'second_time_pressed = True' usw. ändern Die Schleife verbraucht zu viel CPU-Leistung. – furas

Antwort

1

Sie können Generatoren dafür verwenden, indem Sie bei jedem Tastendruck auf next() anrufen.

Ein kleines Beispiel dafür, wie:

import tkinter as tk 

def plusten(x): 
    i = 0 
    while i<x: 
     yield i 
     yield i+10 
     i += 1 

def next_item(): 
    if gen: 
     try: 
      lbl["text"] = next(gen) #calls the next item of generator 
     except StopIteration: 
      lbl["text"] = "End of iteration" #if generator is exhausted, write an error 
    else: 
     lbl["text"] = "start loop by entering a number and pressing start loop button" 

def start_gen(): 
    global gen 
    try: 
     gen = plusten(int(ent.get())) 
     lbl["text"] = "loop started with value: " + ent.get() 
    except ValueError: 
     lbl["text"] = "Enter a valid value" 

gen = None 

root = tk.Tk() 

ent = tk.Entry() 
ent.pack() 
tk.Button(root, text="start loop", command=start_gen).pack() 

tk.Button(root, text="next item", command=next_item).pack() 
lbl = tk.Label(root, text="") 
lbl.pack() 

root.mainloop() 
Verwandte Themen