Python GUI programmation à l'aide de glisser-déposer, en incorporant aussi rediriger stdout
Je suis nouveau en programmation & python. J'ai juste développé mon premier script, il prosesses fichier, mais pour le moment uniquement en ligne de commande.
C'est juste un passe-temps pour moi donc, mon travail ne dépend pas de lui 🙂
J'ai passé quelques jours à essayer d'obtenir ma tête autour de python gui développement & en sont venus à la conclusion que je dois être stupide.
J'ai regardé wxpython & Tkinter, & ne pas comprendre non plus, bien que Tkinter, semble être le plus facile des deux. J'ai même regardé wysiwyg outils comme le Boa Contrictor & wxglade. Je n'ai même pas à comprendre comment l'utiliser. Je préfère rester avec mon éditeur & code manuellement de toute façon.
Mon problème est le suivant:
Je voudrais créer une fenêtre de bureau, soit de 1 ou deux objets, en fonction de ce qui fonctionne le mieux. Si seulement un objet, puis une zone de texte d'une certaine sorte, si 2 objets, puis une zone de texte & une image.
Je veux être en mesure de faire glisser le fichier à partir d'un gestionnaire de fichiers & drop sur ma fenêtre de script, c'est juste pour passer les noms de fichiers à mon script.
Que je veux rediriger stdout vers un objet à l'intérieur de ma fenêtre de bureau, de sorte que toutes les sorties du script s'affiche dans la fenêtre du bureau.
Je ne suis pas sûr si un objet peut faire les deux choses ou pas. Si l'on peut que juste une zone de texte suffit, sinon déposer les fichiers sur l'image & redirigés de la production à la zone de texte.
J'ai trouvé le drag & drop des exemples sur le web mais rien qui intègre rediriger stdout, & je n'ai pas réussi à modifier les exemples que je vous ai rencontré.
Si somee nature seule a le temps de montrer comment réaliser ce que je veux & expliquer comment sa fonctionne je greatfully apprécier!
----EDIT ----
J'ai été jouer avec 2 exemples & ont réussi à hacher les 2 ensemble, afin d'obtenir ce que je voulais de travail. Le Code est ci-dessous. Il n'est pas nettoyé encore ( vieux commentaires, etc... ), mais il fonctionne.
#!/usr/bin/python
# The next two lines are not necessary if you installed TkDnd
# in a proper place.
import os
from Tkinter import *
os.environ['TKDND_LIBRARY'] = '/home/clinton/Python/tkdnd2.6/'
import Tkinter
from untested_tkdnd_wrapper import TkDND
class Redir(object):
# This is what we're using for the redirect, it needs a text box
def __init__(self, textbox):
self.textbox = textbox
self.textbox.config(state=NORMAL)
self.fileno = sys.stdout.fileno
def write(self, message):
# When you set this up as redirect it needs a write method as the
# stdin/out will be looking to write to somewhere!
self.textbox.insert(END, str(message))
root = Tkinter.Tk()
dnd = TkDND(root)
textbox = Tkinter.Text()
textbox.pack()
def handle(event):
event.widget.insert(END, event.data)
content = textbox.get("0.0",Tkinter.END)
filename = content.split()
dnd.bindtarget(textbox, handle, 'text/uri-list')
#Set up the redirect
stdre = Redir(textbox)
# Redirect stdout, stdout is where the standard messages are ouput
sys.stdout = stdre
# Redirect stderr, stderr is where the errors are printed too!
sys.stderr = stdre
# Print hello so we can see the redirect is working!
print "hello"
# Start the application mainloop
root.mainloop()
Exemples sont: python glisser-déposer de l'explorateur de fichiers de tkinter widget de saisie
Et aussi l'exemple fourni aimablement par Noelkd.
Pour que ce code fonctionne, vous devez créer l'emballage de premier exemple. Aussi, actuellement, le code est simplement l'affichage de fichier déposé dans la fenêtre, cependant variable est en place pour être passé sur le script qui s'exécute en arrière de l'interface gui.
OriginalL'auteur Clinton Moffat | 2013-07-17
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser Tkinter:
Ce que cela ne crée une fenêtre avec un bouton et une zone de texte, avec de rediriger la sortie standard stdout.
Actuellement en Tkinter, vous ne pouvez pas faire glisser et déposer des fichiers pour ouvrir la fenêtre tk(vous pouvez si vous utilisez tkdnd), donc j'ai inclus une autre façon d'obtenir le chemin d'accès d'un fichier.
La façon dont je l'ai compris pour sélectionner un fichier est la askopenfilename dialogue de tkFileDialog, cela ouvre un explorateur de fichier et le chemin d'accès du fichier sélectionné est retourné comme une chaîne de caractères.
Si vous avez des questions ou ce n'est pas tout à fait faire ce que vous cherchez, veuillez laisser un commentaire!
Mon fournir avec la compréhension de développement du gui est comment tout cela s'assemble. vous devez créer classess & puis dans les classes, vous devez créer des fonctions. Je suis juste surpris. J'ai pensé que je voudrais juste être capable de faire les choses d'une ligne de code à la fois, sans la complexité. Clinton.
Que devrait avoir lu mon problème avec, c'est pas mon fournir avec. Désolé pour la mauvaise frappe. Aussi merci pour l'explication de chaque ligne, qui va vraiment m'aider à me familiariser avec Tkinter, si je décide de suivre cette voie. Bien sûr, c'est l'autre question à de nombreuses options de l'interface de développement. Clinton
tkinter ne prend pas en charge interapplication de glisser-déposer, malheureusement. Cependant, cette réponse montre comment utiliser une extension appelée tkdnd
Avoir de l'édition de ma question initiale. Ont combiné deux exemples, y compris Noalkd pour créer le résultat que je cherchais. vous n'aurez pas ce fichier traîné à la fenêtre actuellement il est affiché dans cette fenêtre. Ce doit être supprimer. Une variable est déjà en place pour être transmis à l'script python.
OriginalL'auteur Noelkd
Avoir un regard sur GTK. C'est vraiment un très puissant de la bibliothèque. Pas le plus simple, c'est un fait, mais une fois que vous arrivez à comprendre comment les choses fonctionnent, il devient beaucoup plus facile.
Voici la tutoriel officiel
Si oyu sont toujours à l'aide de Python2, je pense que vous devriez utiliser PyGTK mais il a été remplacé par gl (qui est décrit dans le tutoriel ci-dessus). Un bon tutoriel pour PyGTK peut être trouvé ici.
Pour une interface statique, vous pouvez utiliser glade qui produit des fichiers XML qui sont ensuite lus par GTKBuilder pour créer le "réel" de l'interface. Le premier tutoriel que j'ai trouvé est disponible ici
C'est un peu dur au début, mais avec un bon tutoriel, il est assez facile et simple. Bonne chance
OriginalL'auteur Paco