Seite 1 von 1

Schleife per Button sofort beenden

Verfasst: Samstag 16. Dezember 2017, 16:03
von DMD-OL
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 :)

Re: Schleife per Button sofort beenden

Verfasst: Samstag 16. Dezember 2017, 16:52
von __deets__
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.

Re: Schleife per Button sofort beenden

Verfasst: Samstag 16. Dezember 2017, 18:13
von wuf
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:

Re: Schleife per Button sofort beenden

Verfasst: Montag 18. Dezember 2017, 17:04
von DMD-OL
ne hab ich auch gar nicht gewußt.
werde ich natürlich.
und ein fettes danke an wuf.