Hallo zusammen,
bin noch absoluter Python-Neuling und habe angefangen auf Grundlage eines Echo-Server<->Client Systems ein Chat-Programm zu schreiben, wobei der Client mit TKinter läuft.
Soweit funktioniert ja auch alles recht gut, nur hätte ich gern die Funktion, dass das Symbol des Clients in der Taskleiste bei eingehenden Nachrichten blinkt wie bei herkömmlichen Instant Messangern.
Hab mich schon halbtot gesucht um eine Funktion dafür zu finden, aber bis jetzt ohne Erfolg.
Falls jemand mir weiterhelfen kann, wäre ich sehr dankbar
MFG, simmal
Anwendung auf Taskleiste zum blinken bringen
Unter Windows XP funktioniert es z.B. so:MfG
HWK
Code: Alles auswählen
import Tkinter as tk
def see_you_later(text):
text.insert(tk.END, 'Hallo, hier bin ich!')
text.focus_force()
root = tk.Tk()
text = tk.Text(root)
text.pack()
root.after(5000, see_you_later, text)
root.mainloop()
HWK
-
- User
- Beiträge: 7
- Registriert: Donnerstag 15. Oktober 2009, 16:15
Danke für den Tipp, aber das mit "force_focus()" habe ich bereits ohne erfolg versucht.
-
- User
- Beiträge: 7
- Registriert: Donnerstag 15. Oktober 2009, 16:15

-
- User
- Beiträge: 7
- Registriert: Donnerstag 15. Oktober 2009, 16:15
Also, der Fokus aufs Fenster funktioniert soweit, aber nur wenn das Fenster nicht minimiert ist.
Das habe ich wohl vergessen zu erwähnen
Da ich den Client meist minimiert in der Taskleiste habe und andere Benutzer wrsl auch, passiert trotz focus_force() nichts.
Das habe ich wohl vergessen zu erwähnen

Da ich den Client meist minimiert in der Taskleiste habe und andere Benutzer wrsl auch, passiert trotz focus_force() nichts.
Ach so, Du willst Dein Programm nicht im Systray haben, sondern nur in dem Panel, das die iconifizierten Programme aufnimmt.
Was das 'focus_force()' bewirken soll, verstehe ich nicht.
Reicht vielleicht so etwas?
Wenn Du etwas Auffaelligeres haben willst:
http://www.python-forum.de/post-131623.html#131623
yipyip
Was das 'focus_force()' bewirken soll, verstehe ich nicht.
Reicht vielleicht so etwas?
Code: Alles auswählen
#!/usr/bin/env python
import Tkinter as tk
####
class Gui(object):
def __init__(self, interval=500):
self.interval = interval
self.root = tk.Tk()
self.texts = 'The Title', ' ', 'Huhu!'
self.reset()
self.button = tk.Button(self.root, text='Hide', font=('Arial', 64), command=self.hide)
self.button.pack()
def reset(self):
self.state = 0
self.root.title(self.texts[self.state])
def hide(self):
self.root.iconify()
self.blink()
def blink(self):
if self.root.state() == 'iconic':
self.state ^= 1
self.root.title(self.texts[self.state+1])
self.id = self.root.after(self.interval, self.blink)
else:
self.reset()
self.root.after_cancel(self.id)
def run(self):
self.root.mainloop()
####
if __name__ == '__main__':
Gui().run()
http://www.python-forum.de/post-131623.html#131623

yipyip
-
- User
- Beiträge: 7
- Registriert: Donnerstag 15. Oktober 2009, 16:15
Genau so etwas in der Art hatt ich mir vorgestellt.
Jetz des Ganze nur noch in meinen Code einbinden, aber des nicht mehr heute^^
Aber vielen Dank:)
Jetz des Ganze nur noch in meinen Code einbinden, aber des nicht mehr heute^^
Aber vielen Dank:)
Probier doch mal mein Beispiel ohne aus.yipyip hat geschrieben:Was das 'focus_force()' bewirken soll, verstehe ich nicht.
Ja, das hast Du.Silent_Simmal hat geschrieben:Also, der Fokus aufs Fenster funktioniert soweit, aber nur wenn das Fenster nicht minimiert ist.
Das habe ich wohl vergessen zu erwähnen.
MfG
HWK
Nach ein bisschen Probieren hier eine Windows-spezifische Lösung, die auch minimiert funktioniert:MfG
HWK
Code: Alles auswählen
import Tkinter as tk
import win32con, win32gui
TITLE = 'Mein Fenster'
def see_you_later(text):
handle = win32gui.FindWindow(None, TITLE)
text.insert(tk.END, 'Hallo, hier bin ich!')
win32gui.FlashWindowEx(handle, win32con.FLASHW_TRAY, 5, 0)
root = tk.Tk()
root.title(TITLE)
text = tk.Text(root)
text.pack()
root.after(5000, see_you_later, text)
root.mainloop()
HWK
-
- User
- Beiträge: 7
- Registriert: Donnerstag 15. Oktober 2009, 16:15
Also, Zwischenergebnis:
Das mehrmalige blinken von HWK funktioniert wunderbar, vielen dank dafür.
Probleme habe ich allerdings mit dem "dynamischen" ändern des Titels, was von yipyip vorgeschlagen wurde, da sich beim Versuch das einzubauen mein Fenster aufhängt, und nicht mehr reagiert, wenn es minimiert ist.
Dasselbe passierte auch, als ich versucht habe das minimierte Fenster durch "deiconify" wieder in den Vordergrund zu bringen.
Das mehrmalige blinken von HWK funktioniert wunderbar, vielen dank dafür.
Probleme habe ich allerdings mit dem "dynamischen" ändern des Titels, was von yipyip vorgeschlagen wurde, da sich beim Versuch das einzubauen mein Fenster aufhängt, und nicht mehr reagiert, wenn es minimiert ist.
Dasselbe passierte auch, als ich versucht habe das minimierte Fenster durch "deiconify" wieder in den Vordergrund zu bringen.
-
- User
- Beiträge: 7
- Registriert: Donnerstag 15. Oktober 2009, 16:15
Dass ich mit Threads arbeite stimmt. Möglich dass darin der Fehler liegt.
Allerdings bin ich wie gesagt noch ziemlicher Anfänger und kann das (noch) nicht überprüfen, da der Chat auf einem Echo-Server<->Client System aufbaut, welches mit Threads arbeitet und welches ich nur übernommen und um die GUI und diverse Funktionen erweitert habe.
Mit dem Thema Threads und sockets beschäftige ich mich zwar gerade, aber bin noch nicht allzuweit gekommen.
Würde meinen Code ja gerne zur Überprüfung zur Verfügung stellen, allerdings ist der mittlerweile zu lang, um ihn hier zu posten.
Allerdings bin ich wie gesagt noch ziemlicher Anfänger und kann das (noch) nicht überprüfen, da der Chat auf einem Echo-Server<->Client System aufbaut, welches mit Threads arbeitet und welches ich nur übernommen und um die GUI und diverse Funktionen erweitert habe.
Mit dem Thema Threads und sockets beschäftige ich mich zwar gerade, aber bin noch nicht allzuweit gekommen.
Würde meinen Code ja gerne zur Überprüfung zur Verfügung stellen, allerdings ist der mittlerweile zu lang, um ihn hier zu posten.
Dann verwende halt einen Pastebin:
http://paste.pocoo.org/
http://paste.pocoo.org/