2008-10-07 6 views
21

Est-il possible de produire une alerte similaire à l'alerte JavaScript ("message") en python, avec une application exécutée en tant que démon.Boîtes d'alerte en Python?

Ceci sera exécuté dans Windows, XP probablement mais 2000 et Vista sont également des possibilités très réelles.

Mise à jour:
Ceci est destiné à fonctionner en arrière-plan et alerter l'utilisateur lorsque certaines conditions sont remplies, je figure que la meilleure façon d'alerter l'utilisateur serait de produire un pop-up, car il doit être traitées immédiatement, et d'autres options telles que la journalisation ou l'envoi d'un e-mail ne sont pas assez efficaces.

+1

Je suppose qu'une meilleure façon d'exprimer cela est un "processus d'arrière-plan" et non un démon. – UnkwnTech

Répondre

38

Qu'en est-ce:

import win32api 

win32api.MessageBox(0, 'hello', 'title') 

De plus:

win32api.MessageBox(0, 'hello', 'title', 0x00001000) 

fera la boîte apparaissent au-dessus des autres fenêtres, pour les messages urgents. Voir MessageBox function pour d'autres options.

+0

Ceci est exactement ce dont j'ai besoin Merci. – UnkwnTech

+2

Pour plus d'informations sur cette fonction, j'ai trouvé ceci: http://docs.activestate.com/activepython/2.4/pywin32/win32api__MessageBox_meth.html – UnkwnTech

+11

Je reçois 'ImportError: aucun module nommé win32api'. – user

-2

Démarrez une application en tant que processus d'arrière-plan qui a un port TCP lié à localhost, ou communique via un fichier - votre démon a le fichier ouvert, puis echo "foo" > c:\your\file. Après, disons, 1 seconde d'aucune activité, vous affichez le message et tronquez le fichier.

+2

Cela semble énormément de travail, et cela ne résout pas le problème. – UnkwnTech

+0

Vous n'avez pas spécifié les conditions d'affichage de la boîte de dialogue. J'ai supposé des dépendances inter-applications. –

+0

J'ai dit que je devais produire une boîte d'alerte, cela n'affiche pas une alerte. – UnkwnTech

1

Vous pouvez utiliser la bibliothèque win32 en Python, ceci est un exemple classique de OK ou Annuler.

import win32api 
import win32com.client 
import pythoncom 

result = win32api.MessageBox(None,"Do you want to open a file?", "title",1) 

if result == 1: 
print 'Ok' 
elif result == 2: 
print 'cancel' 

La collection:

win32api.MessageBox(0,"msgbox", "title") 
win32api.MessageBox(0,"ok cancel?", "title",1) 
win32api.MessageBox(0,"abort retry ignore?", "title",2) 
win32api.MessageBox(0,"yes no cancel?", "title",3) 
+4

vous importez pythoncom et win32com.client pour rien – totaam

3

GTK peut être une meilleure option, car il est multi-plateforme. Cela marchera très bien sur Ubuntu, et devrait fonctionner correctement sur Windows lorsque les liaisons GTK et Python sont installées.

from gi.repository import Gtk 

dialog = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO, 
      Gtk.ButtonsType.OK, "This is an INFO MessageDialog") 
dialog.format_secondary_text(
    "And this is the secondary text that explains things.") 
dialog.run() 
print "INFO dialog closed" 

Vous pouvez voir d'autres exemples here. (pdf)

Les arguments passés doivent être le parent gtk.window (ou None), DestroyWithParent, Type de message, Boutons de message, title.

+0

D'une certaine manière cela me donne une erreur "aucun module nommé référentiel". On dirait que c'est démodé? – Kev1n91

+0

@ Kev1n91 Vous sur Ubuntu 16.04 ou plus récent? Essayez-le en python3. :) – NoBugs