web-dev-qa-db-fra.com

Quel est le moyen de plate-forme multi-plate-forme la plus simple pour apparaître des dialogues graphiques dans Python?

Je veux que le moyen le plus simple possible de connecter des dialogues simples dans Python scripts. Idéalement, la solution ferait:

  • Travailler sur Windows, OS X, GNOME, KDE
  • Ressembler à une boîte de dialogue native sur un système d'exploitation
  • Nécessite un code minimal

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.

[ demandé précédemment sur Python Forum ]

38
endolith

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')

Tkinter is ugly on UbuntuTKinter is ugly on Windows 7

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.

enter image description here

22
endolith

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.

Zenity looks pretty good in GnomeZenity looks good in KDE, too, suprisinglyZenity in Windows has the wrong GTK theme

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.

14
endolith

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

12
John La Rooy

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/

10
Al Sweigart

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.

8
Russ

@ 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:

alt text
(Source: placella.com )

Paix, Rouslan

6
Roccivic

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()
5
FogleBird

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') 

Tkinter is super ugly

3
endolith

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()
1
Foofy