2011-11-12 7 views
1

J'ai une interface graphique avec des widgets d'étiquette et d'entrée sur un widget de cadre. Je veux ajouter une invite de commande à l'image à travers laquelle l'utilisateur peut soumettre des commandes. Je sais utiliser le module cmd pour créer une invite dans le shell python, mais je veux que l'invite fasse partie de ma fenêtre GUI. Est-il possible d'incorporer une invite de commande dans un canevas par exemple? En ce moment j'utilise Cmd. initialisation (auto) et cmdloop pour démarrer une invite en shell python ...Invite de commande dans un autre widget

Juste pour préciser plus loin, je voudrais que le shell pour lancer à partir de ma fenêtre GUI (par exemple dans une toile), et non comme propre fenêtre. Est-ce possible?

+0

Utilisez-vous Tkinter? –

+0

Oui, je suis. Vous savez comment résoudre mon problème? – MiddleClassMan

+0

Si vous utilisez Linux, regardez ici: http://stackoverflow.com/questions/7253448/how-to-embed-a-terminal. Si vous utilisez Windows, vous devrez utiliser une méthode similaire, mais avec une fenêtre CMD au lieu d'une fenêtre xterm. Je ne crois pas que CMD possède une propriété '-into', donc vous devrez dire à l'OS de mettre la fenêtre CMD à l'intérieur de celle de Tkinter, plutôt que d'avoir sa propre fenêtre. Cela signifie que vous devrez avoir une très bonne compréhension de l'API Windows. –

Répondre

0

Le module cmd a été conçu pour les terminaux, où un seul «widget» textuel est utilisé à la fois pour l'entrée et la sortie. Ce n'est pas vraiment adapté pour une interface graphique.

Voici une idée (inspirée par les frameworks web comme pyramide) qui fonctionne mieux:

Avoir une lecture seule un widget pour la sortie, et un widget séparé pour l'entrée de commande.

Lorsque l'utilisateur appuie sur Entrée, copier la commande de la boîte de sortie (préfixant avec « >>> » et « ... » le cas échéant), exécuter la commande (en utilisant compile_command et run_code à partir du module code, avec redirection sys.stdout à StringIO qui est ajouté à la sortie), puis ajoutez la sortie dans la zone de sortie.

+0

Merci, je vais essayer de le faire, je suis assez nouveau pour Python. – MiddleClassMan

Questions connexes