Schleife per Button sofort beenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

Ich versuche grade eine laufende Schleife möglichst sofort per Knopfdruck zu beenden.

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import Tkinter
from Tkinter import Frame, Button

running = True

def scanning():
    if running:
        for element in range(5000):
            print element


def stop():
    global running
    running = False


root = Tkinter.Tk()
app = Frame(root)
app.grid()

start = Button(app, text="Start", command=scanning).grid()
stop = Button(app, text="Stop", command=stop).grid()

root.mainloop()
Kann man die Schleife während des Laufens unterbrechen oder sogar beenden (was noch besser wär)?
Danke schon mal :)
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

So geht das nicht. Das wird hier aber wirklich JEDE Woche im Tkinter Forum diskutiert. Hast du schon mal ein bisschen hier gestöbert? Da wirst du ganz viel fündig wie man so etwas macht.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi DMD-OL

Habe dein Skript leicht geändert. Da deine Anwendung Tk bezogen ist würde ich empfehlen sie im Unterforum für Tkinter zu plazieren :

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

try:
    # Tkinter for Python 2.xx
    import Tkinter as tk
except ImportError:
    # Tkinter for Python 3.xx
    import tkinter as tk

MAX_COUNT = 50
TIME_STEP = 100 # Milliseconds
LABEL_WIDTH = 3
LABEL_FONT = ('Helevetica', 20, 'bold')


def start():
    if not root.running:
        root.running = True
        root.label_var.set(0)
        counter()

def counter(count=0):
    if not root.running: return
    
    count += 1
    if count == MAX_COUNT: stop()
    root.label_var.set(count)
    root.after(TIME_STEP, counter, count)
      
def stop():
    root.running = False

root = tk.Tk()
root.config(relief='groove', bd=2)

root.running = False
root.label_var = tk.StringVar()
root.label_var.set(0)

app = tk.Frame(root)
app.grid(padx=4, pady=4)

tk.Label(app, textvariable=root.label_var, font=LABEL_FONT,
    relief='sunken', bg='khaki', width=LABEL_WIDTH).pack(fill='x', pady=2)
tk.Button(app, text="Start", command=start).pack(pady=2)
tk.Button(app, text="Stop", command=stop).pack()

root.mainloop()
Gruss wuf :wink:
Take it easy Mates!
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

ne hab ich auch gar nicht gewußt.
werde ich natürlich.
und ein fettes danke an wuf.
Antworten