Je veux que le moyen le plus simple possible de connecter des dialogues simples dans Python scripts. Idéalement, la solution ferait:
Pour apparaître, une boîte de dialogue standard simple doit nécessiter uniquement un code minimal. Essentiellement, vous dites simplement "Poper une boîte de dialogue standard avec ce texte" ou "Postuler une boîte de dialogue avec la question X et la réponse alimentaire dans la variable Y".
Ceci est pour des scripts simples qui couraient autrement sur la ligne de commande. Je ne veux pas savoir sur les cadres d'interface graphique ou à configurer le code indiquant "Démarrer un thread d'interface graphique, enregistrer un gestionnaire d'événements, configurer des propriétés de la fenêtre, exécuter une boucle", etc. Je ne veux pas avoir à régler dans une fenêtre ou fermez la fenêtre après. Je lui donne le texte de mettre dans la fenêtre et/ou des boutons et/ou des cases à cocher, il renvoie ce que l'utilisateur a cliqué sur. Tout le reste devrait être pris en charge automatiquement. Par exemple:
message_box('File conversion complete')
pour une boîte de dialogue standard avec un bouton "OK", ou
balloon_tip('File conversion complete')
pour un ballon popup de plateau système, ou
format = button_box('Which file format do you want?', 'JPG', 'PNG')
et ils appuient sur l'un des deux boutons, puis format
est égal à 'JPG'
, ou
response = text_query('What would you like to name the file?')
et après avoir saisi la boîte et appuyez sur OK, response
est maintenant égal à 'bananas.txt'
. Aucun autre code requis. Aucune ligne de commande laide n'inqulève l'utilisateur pauvre.
J'ai répertorié Zénity et Easygui comme exemple de réponses, car ils sont similaires à ce que je veux, mais pas parfait.
EASYGUI est un fichier unique et fournit un moyen simple de travailler avec des dialogues Tkinter, mais ils sont toujours laids de dialogues Tkinter non natifs.
from easygui import msgbox
msgbox('Stuff')
Il peut facilement être installé en utilisant:
$ Sudo pip3 install --upgrade easygui
Il y a un référentiel GitHub et Documentation est très propre.
Auparavant, il y avait aussi une fourchette appelée EasyGuittk , qui n'est malheureusement plus disponible.
ZENITY fonctionne sous Linux et Windows , et peut être appelé à partir de Python directement:
import os
os.system('zenity --info --text="Stuff"')
Les valeurs de retour des boîtes de questions doivent être capturées pour agir, ce qui est cependant plus complexe, et vous devez apprendre à communiquer avec des sous-processus, etc.
Il peut également être utilisé avec le pyzénity front-end, qui rend la capture de valeurs de retour simple:
from PyZenity import InfoMessage
InfoMessage('Stuff')
J'ai testé la pyzénicité dans Ubuntu et Windows XP, et cela fonctionne dans les deux.
Je lis cette zénity est GTK + seulement, mais je l'ai essayé dans Gnome et KDE et ça a l'air natif dans les deux. Le port à Windows n'a pas l'air natif, car il utilise le mauvais thème GTK?
Il existe également d'autres programmes tels que - kdialog et xdialog qui pourraient être interfacés à un fichier similaire Python frontage pouvant vérifier et voir quels exécutables sont disponibles. afin qu'il s'occupe automatiquement de tout? (Il y a un Frontend Ruby pour Kdialog aussi.)
Je ne sais pas si la pyzénie fonctionne sous OS X, non plus.
tkinter est généralement fourni avec python
# File: hello1.py
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
Si vous voulez quelque chose de plus natif à la recherche, vous devrez installer quelque chose comme WXPython
Le module PymsgBox fait presque exactement cela. Il utilise le module Tkinter intégré pour ses fonctions de boîte de message qui suivent les conventions de nommage de JavaScript: alerte (), confirmez (), invite () et mot de passe () (qui est invite () mais utilise * lorsque vous tapez). Ces appels de fonction bloquent jusqu'à ce que l'utilisateur clique sur un bouton OK/Annuler. C'est une plate-forme croisée, pure Python module sans dépendances.
Les boîtes de message d'appartements natives seront disponibles dans une future version.
Installer avec: pip install PyMsgBox
Utilisation des échantillons:
>>> import pymsgbox
>>> pymsgbox.alert('This is an alert!', 'Title')
>>> response = pymsgbox.Prompt('What is your name?')
Documentation complète à http://pymsgbox.readthedocs.org/fr/Latest/
Pour s'étendre sur la réponse tkmessagebox d'endolith avec la fenêtre vide laide en arrière-plan ...
Le code ci-dessous apparaît dans la boîte sans la fenêtre d'arrière-plan.
import Tkinter, tkMessageBox
root = Tkinter.Tk()
root.withdraw()
tkMessageBox.showinfo("my dialog title", "my dialog message")
Ceci est soulevé directement d'un commentaire utile que j'ai trouvé au bas de - cet article . Merci à Jason (le commentateur) et à Effbot.org.
@ Endolith, re: Zenity pour Windows.
Salut,
J'ai reconditionné "Zenity for Windows" et j'ai inclus le fichier thème GTK correct. Ça a l'air beaucoup mieux maintenant. :) Il est maintenant disponible pour le téléchargement: http://www.placella.com/software/zenity/
Capture d'écran:
(Source: placella.com )
Paix, Rouslan
wXPYTHON est le meilleur Python bibliothèque d'interface graphique (OMI) et utilise des widgets natifs.
import wx
app = wx.PySimpleApp()
dialog = wx.MessageDialog(None, 'wxPython is awesome!', 'Dialog Box', wx.OK|wx.ICON_INFORMATION)
dialog.ShowModal()
dialog.Destroy()
app.MainLoop()
Une autre possibilité est le module TKMessagebox , qui est apparemment intégrée à la bibliothèque standard et est multiplate-forme, bien que cela soit encore plus moche que le reste:
import tkMessageBox
tkMessageBox.showinfo('Title','Stuff')
pyglet est une autre alternative, bien que ce ne soit peut-être pas le plus simple. Cela étant dit, il est multiplate-forme et dépend seulement de Python, il n'y a donc pas de dépendances externes. Ce fait seul peut être une raison suffisante pour l'utiliser sur les autres.
et tout ce qu'il peut gérer assez facilement le multimédia, assez pratique si vous souhaitez afficher une image ou une vidéo ou quelque chose.
l'exemple ci-dessous provient de la documentation ...
#!/usr/bin/python
import pyglet
window = pyglet.window.Window()
label = pyglet.text.Label('Hello, world',
font_name='Times New Roman',
font_size=36,
x=window.width/2, y=window.height/2,
anchor_x='center', anchor_y='center')
@window.event
def on_draw():
window.clear()
label.draw()
pyglet.app.run()