2009-02-26 4 views
4

Pour les questions suivantes, les réponses peuvent être C/C++, C# ou Python. Je voudrais que les réponses sont multi-plateforme, si possible, mais je me rends compte que je vais probablement besoin conio ou ncursesComment créer une interface graphique en couleur dans une application console?

  1. Comment le texte coloré sortie I?
  2. Comment est-ce que je ferais une interface graphique comme top ou nethack où certaines choses sont "dessinées" à certains espaces dans le terminal?

Si possible, un petit exemple de code oneliner serait génial.

+3

Si seulement il était en quelque sorte possible de télécharger le code source en haut ou nethack. – bk1e

Répondre

1

La plupart des fenêtres de terminal comprennent les séquences d'échappement ANSI, qui permettent la coloration, le déplacement du curseur, etc. Vous pouvez en trouver une liste here.

L'utilisation de ces séquences peut sembler un peu "old school", mais vous pouvez les utiliser dans les cas où les curses ne sont pas vraiment applicables. Par exemple, utiliser la fonction que vous avez choisi dans mes scripts bash pour afficher les messages d'erreur en rouge:

color_red() 
{ 
    echo -e "\033[01;31m$1\033[00m" 
} 

Vous pouvez dire des choses comme:

color_red "something has gone horribly wrong!" 
exit 1 
4

Oui, ce sont des codes d'échappement VT100. La chose la plus simple est d'utiliser une certaine saveur de malédictions. Une fois, vous choisissez une saveur curses, il est assez simple de faire à la fois 1 et 2.

Voici un HowTo sur ncurses.

http://web.cs.mun.ca/~rod/ncurses/ncurses.html

+3

+1: http://docs.python.org/library/curses.html, http://www.amk.ca/python/howto/curses/ –

+0

+1 et http://stackoverflow.com/questions/ 588622/some-console-gui-questions – kenny

+0

Le lien Internet d'origine est maintenant cassé. – wonea

1

, la console est à bien des égards une simple émulation de un dispositif terminal classique. Les curses ont été créées à l'origine pour prendre en charge une manière de faire des opérations communes sur différents types de terminaux, où le terminal en cours d'utilisation pourrait être sélectionné par l'utilisateur dans le cadre de la séquence de connexion. Ce patrimoine survit aujourd'hui à ncurses. La bibliothèque ncurses fournit des fonctions à appeler pour positionner directement le curseur et émettre du texte, et elle est connue pour fonctionner avec la console Windows (où s'exécute CMD.EXE), ainsi qu'avec divers équivalents de plate-forme * nix tels que XTerms etc. Il fonctionne probablement même avec un vrai Dec VT100 sur une ligne série si vous aviez une telle chose ...

Les séquences d'échappement comprises par les modèles VT100 et ultérieurs sont devenues la base pour le terminal standard ANSI. Mais vous ne voulez vraiment pas savoir à ce sujet. Utilisez ncurses et vous ne devrez pas. S'appuyer sur conio ne vous empêchera pas de multiplier la plate-forme, car il s'agit d'une API spécifique à DOS et à Windows.

Edit: Apparemment, la bibliothèque ncurses lui-même est pas facilement construit sur MinGW, au moins aussi observé d'une tentative rapide de Google vers le haut. Cependant, tout n'est pas perdu, car ncurses est seulement l'un des descendants de la bibliothèque originale curses.

Un autre est PDCursesest est connu pour compiler et exécuter pour Windows Consoles, ainsi que pour X11 et une variété de plates-formes * nix.

(Je viens de me rappeler des références à Wikipédia que des malédictions sont apparues lors de l'écriture du jeu rogue, qui est l'ancêtre de nethack, dont une partie a été "empruntée" au module de gestion de curseur de l'éditeur vi Donc, la spéléologie dans le nethack source kit pour des idées ne peut pas être une idée folle du tout ...)

+0

ok merci ... j'utilise mingw pour faire le travail C/C++, j'ai essayé d'inclure ncurses.h, mais il a dit qu'il ne pouvait pas le trouver, ai-je besoin de l'obtenir de quelque part? –

+0

Google implique qu'il peut y avoir des problèmes avec ncurses et mingw. Je vais éditer ma réponse avec quelques détails ... – RBerteig

0

En C#, vous pouvez définir la couleur du texte et la couleur de fond via les propriétés Console.ForegroundColor et Console.BackgroundColor, respectivement . Pour une liste des couleurs valides, voir ceci MSDN doc.

Questions connexes