Label blinken lassen
Verfasst: Mittwoch 5. Dezember 2007, 16:29
Guten Tag die Herren gibt es die möglichkeit in Tkinter ein Label mit bswp. dem Text "GO!" blinken zu lassen?
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
#ungetestet
import Tkinter as tk
def blink(l, f1, f2):
if l["bg"] == f1:
l["bg"] = f2
else:
l["bg"] = f1
l.after(200, blink, l, f1, f2)
l = tk.Label(text="GO!")
l.pack()
blink(l, "green", "red")
tk.mainloop()
AttributeError: Label instance has no attribute 'flash'SchneiderWeisse hat geschrieben:hierfür ist doch eigentlich die Methode flash() gedacht...
Code: Alles auswählen
import Tkinter as tk
def blink(l, f1, f2):
if l["bg"] == f1:
l["bg"] = f2
else:
l["bg"] = f1
l.after(200, blink, l, f1, f2)
l = tk.Label(text="GO!")
l.pack()
blink(l, "green", "red")
tk.mainloop()
Code: Alles auswählen
from tkinter import *
import tkinter as tk
import sys
master = Tk()
master.title("Störungen")
master.geometry("700x500")
master.configure(bg='black')
f1 = "orange"
f2 = "red"
def stop():
l = False
def loop():
def blink(l, f1, f2):
if l["bg"] == f1:
l["bg"] = f2
else:
l["bg"] = f1
l.after(400, blink, l, f1, f2)
l = True
return
blink(MyLabel1,"green", "red")
MyLabel1 = Label(master, bg="green", text="OK")
MyLabel1.place(x=50,y=50, width=200,height=140)
Quit_button = Button(master, text="schließen", background='steelblue1', activebackground='steelblue3', command=master.destroy)
Quit_button.place(x = 25, y = 430, width=120, height=40)
Start_button = Button(master, text="Start", background='steelblue1', activebackground='steelblue3', command=loop)
Start_button.place(x = 225, y = 430, width=120, height=40)
Stop_button = Button(master, text="Stop", background='steelblue1', activebackground='steelblue3', command=stop)
Stop_button.place(x = 425, y = 430, width=120, height=40)
master.mainloop()
Code: Alles auswählen
import tkinter as tk
from itertools import cycle
class MainWindow(tk.Tk):
COLORS = ["orange", "red"]
def __init__(self):
super().__init__()
self.title("Störungen")
self.colors = cycle(self.COLORS)
self.blink_id = None
self.blink_label = tk.Label(self, bg="green", text="OK")
self.blink_label.pack(fill=tk.X)
tk.Button(self, text="schließen", background='steelblue1',
activebackground='steelblue3', command=self.destroy).pack(fill=tk.X)
tk.Button(self, text="Start", background='steelblue1',
activebackground='steelblue3', command=self.blink).pack(fill=tk.X)
tk.Button(self, text="Stop", background='steelblue1',
activebackground='steelblue3', command=self.stop).pack(fill=tk.X)
def stop(self):
if self.blink_id:
self.after_cancel(self.blink_id)
self.blink_label["bg"] = "green"
def blink(self):
self.blink_label["bg"] = next(self.colors)
self.blink_id = self.after(400, self.blink)
def main():
master = MainWindow()
master.mainloop()
if __name__ == '__main__':
main()
Code: Alles auswählen
def blink(self):
self.blink_label["bg"] = next(self.colors)
self.blink_id = self.after(400, self.blink)
Wo siehst du da bitte eine rekursive Funktion? Es wird einfach ein timer-callback registriert, da rekursiert nichts. Entsprechend auch keine Probleme mit dem Stack.paulposteo hat geschrieben: ↑Donnerstag 5. Dezember 2019, 15:01 Eine rekursive Funktion ohne Abbruchbedingung? Das klingt nach (früh oder eher später): stack-overflow!