Label blinken lassen
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Was meinst du mit "blinken"? Mal kurz oder dauerhaft, wie blink in html?
Ich meine es geht beides nicht, aber man könnte es verschieden nachbauen.
Buttons kannst du mit "flash" kurz blinken lassen, dann noch command=None und relief ="flat", ...
Ansonsten was in der Art:
Ich meine es geht beides nicht, aber man könnte es verschieden nachbauen.
Buttons kannst du mit "flash" kurz blinken lassen, dann noch command=None und relief ="flat", ...
Ansonsten was in der Art:
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()
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
AttributeError: Label instance has no attribute 'flash'SchneiderWeisse hat geschrieben:hierfür ist doch eigentlich die Methode flash() gedacht...
-
- User
- Beiträge: 90
- Registriert: Dienstag 22. Mai 2018, 07:15
Wie stoppe ich die Funktion wieder?
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()
-
- User
- Beiträge: 90
- Registriert: Dienstag 22. Mai 2018, 07:15
Hab es mal mit über Buttons probiert komme aber nicht zu Lösung, so das ich es mit einem Button Ein bzw. Ausschalten kann, das Ein funktioniert aber aus leider nicht..
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()
Nochmal: das etwas blinkt liegt daran, dass du die Funktion "blink" sich selbst durch after alle 400 ms aufrufen laesst. Wenn du moechtest, dass das aufhoert, darfst du das halt nicht machen. Aber natuerlich nicht gar nicht, dann blinkt ja nichts mehr. Wenn man etwas mal machen will, mal nicht, dann kann man das mit einer if-Abfrage entscheiden.
Und was dir auch auf die Fuesse fallen wird, sobald du das probierst ist, deine ganzen Namen mal sauber zu machen. l ist also ein label, das du umkonfigurierst, aber es soll auch gleichzeitig ein Wahrheitswert sein, der bestimmt, ob noch geblinkt wird oder nicht? Wie soll denn das deiner Meinung nach gehen?
Last but not least: du bist hier seit Monaten unterwegs, mit der Weiterentwicklung deines Projektes. Ganz zu Anfang hast du behauptet, du brauchst programmieren ja eigentlich gar nicht. Offensichtlich doch. Also - lern es.
Und was dir auch auf die Fuesse fallen wird, sobald du das probierst ist, deine ganzen Namen mal sauber zu machen. l ist also ein label, das du umkonfigurierst, aber es soll auch gleichzeitig ein Wahrheitswert sein, der bestimmt, ob noch geblinkt wird oder nicht? Wie soll denn das deiner Meinung nach gehen?
Last but not least: du bist hier seit Monaten unterwegs, mit der Weiterentwicklung deines Projektes. Ganz zu Anfang hast du behauptet, du brauchst programmieren ja eigentlich gar nicht. Offensichtlich doch. Also - lern es.
@Streifenhase1: wenn man Zustand hat (also Farbe, Blink-Status, etc), dann kommt man um eine Klasse nicht herum.
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()
-
- User
- Beiträge: 90
- Registriert: Dienstag 22. Mai 2018, 07:15
@Sirius3
Danke!!!
Danke!!!
-
- User
- Beiträge: 2
- Registriert: Donnerstag 5. Dezember 2019, 14:58
@Sirius3
Diese Funktion hat ein großes Problem:
Eine rekursive Funktion ohne Abbruchbedingung? Das klingt nach (früh oder eher später): stack-overflow!
Diese Funktion hat ein großes Problem:
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!
-
- User
- Beiträge: 2
- Registriert: Donnerstag 5. Dezember 2019, 14:58
Ah, nur registrierung eines callback, und danach wird die Funktion beendet. Alles klar! Danke!