Pertanyaan Cetak di terminal dengan warna?


Bagaimana saya bisa menampilkan teks berwarna ke terminal, dengan Python? Apa simbol Unicode terbaik untuk mewakili blok yang solid?


1515
2017-11-13 18:58


asal


Jawaban:


Ini agak tergantung pada platform Anda. Cara paling umum untuk melakukan ini adalah dengan mencetak sekuensi escape ANSI. Untuk contoh sederhana, inilah beberapa kode python dari blender membangun skrip:

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

Untuk menggunakan kode seperti ini, Anda dapat melakukan sesuatu seperti

print bcolors.WARNING + "Warning: No active frommets remain. Continue?" 
      + bcolors.ENDC

Ini akan bekerja pada unix termasuk OS X, linux dan windows (asalkan Anda gunakan ANSICON, atau di Windows 10 asalkan Anda aktifkan Emulasi VT100). Ada kode ansi untuk pengaturan warna, memindahkan kursor, dan banyak lagi.

Jika Anda akan menjadi rumit dengan ini (dan kedengarannya seperti Anda jika Anda menulis permainan), Anda harus melihat ke dalam modul "kutukan", yang menangani banyak bagian rumit ini untuk Anda. Itu Python Curses HowTO adalah pengantar yang bagus.

Jika Anda tidak menggunakan ASCII diperpanjang (yaitu tidak pada PC), Anda terjebak dengan karakter ascii di bawah 127, dan '#' atau '@' mungkin adalah taruhan terbaik Anda untuk sebuah blok. Jika Anda dapat memastikan terminal Anda menggunakan IBM diperpanjang set karakter ascii, Anda memiliki lebih banyak opsi. Karakter 176, 177, 178 dan 219 adalah "karakter blok".

Beberapa program berbasis teks modern, seperti "Dwarf Fortress", meniru mode teks dalam mode grafis, dan menggunakan gambar font PC klasik. Anda dapat menemukan beberapa bitmap ini yang dapat Anda gunakan di Benteng Dwarf Wiki Lihat (ubin buatan pengguna).

Itu Kontes Demo Mode Teks memiliki lebih banyak sumber daya untuk melakukan grafis dalam mode teks.

Hmm .. saya pikir agak terbawa pada jawaban ini. Saya sedang merencanakan sebuah game petualangan berbasis teks yang epik. Semoga sukses dengan teks berwarna Anda!


1340
2017-11-13 19:25



Saya terkejut tidak ada yang menyebutkan Modul termcolor Python. Penggunaannya cukup sederhana:

from termcolor import colored

print colored('hello', 'red'), colored('world', 'green')

Ini mungkin tidak cukup canggih, namun, untuk pemrograman game dan "blok berwarna" yang ingin Anda lakukan ...


553
2017-11-16 07:31



Jawabannya adalah Colorama untuk semua pewarnaan lintas platform dengan Python.

Screenshot contoh Python 3.6: example screenshot


477
2017-07-26 07:07



Cetak string yang memulai warna / gaya, lalu string, lalu akhiri perubahan warna / gaya dengan '\x1b[0m':

print('\x1b[6;30;42m' + 'Success!' + '\x1b[0m')

Success with green background example

Dapatkan tabel opsi format untuk teks shell dengan kode berikut:

def print_format_table():
    """
    prints table of formatted text format options
    """
    for style in range(8):
        for fg in range(30,38):
            s1 = ''
            for bg in range(40,48):
                format = ';'.join([str(style), str(fg), str(bg)])
                s1 += '\x1b[%sm %s \x1b[0m' % (format, format)
            print(s1)
        print('\n')

print_format_table()

Contoh terang-ke-gelap (lengkap)

enter image description here

Contoh gelap-pada-cahaya (sebagian)

top part of output


280
2018-02-14 17:56



Anda ingin belajar tentang urutan keluar ANSI. Berikut contoh singkatnya:

CSI="\x1B["
print CSI+"31;40m" + "Colored Text" + CSI + "0m"

Untuk info lebih lanjut lihat http://en.wikipedia.org/wiki/ANSI_escape_code

Untuk karakter blok, coba karakter unicode seperti \ u2588:

print u"\u2588"

Menyatukan semuanya:

print CSI+"31;40m" + u"\u2588" + CSI + "0m"

71
2017-11-13 19:22



Tentukan string yang memulai warna dan string yang mengakhiri warna, lalu cetak teks Anda dengan string awal di bagian depan dan ujung string di bagian akhir.

CRED = '\033[91m'
CEND = '\033[0m'
print(CRED + "Error, does not compute!" + CEND)

Ini menghasilkan berikut ini bash, di urxvtdengan skema warna bergaya Zenburn:

output colors

Melalui experemintation, kita bisa mendapatkan lebih banyak warna:

color matrix

catatan: \33[5m dan \33[6m berkedip-kedip.

Dengan cara ini kita dapat membuat koleksi warna penuh:

CEND      = '\33[0m'
CBOLD     = '\33[1m'
CITALIC   = '\33[3m'
CURL      = '\33[4m'
CBLINK    = '\33[5m'
CBLINK2   = '\33[6m'
CSELECTED = '\33[7m'

CBLACK  = '\33[30m'
CRED    = '\33[31m'
CGREEN  = '\33[32m'
CYELLOW = '\33[33m'
CBLUE   = '\33[34m'
CVIOLET = '\33[35m'
CBEIGE  = '\33[36m'
CWHITE  = '\33[37m'

CBLACKBG  = '\33[40m'
CREDBG    = '\33[41m'
CGREENBG  = '\33[42m'
CYELLOWBG = '\33[43m'
CBLUEBG   = '\33[44m'
CVIOLETBG = '\33[45m'
CBEIGEBG  = '\33[46m'
CWHITEBG  = '\33[47m'

CGREY    = '\33[90m'
CRED2    = '\33[91m'
CGREEN2  = '\33[92m'
CYELLOW2 = '\33[93m'
CBLUE2   = '\33[94m'
CVIOLET2 = '\33[95m'
CBEIGE2  = '\33[96m'
CWHITE2  = '\33[97m'

CGREYBG    = '\33[100m'
CREDBG2    = '\33[101m'
CGREENBG2  = '\33[102m'
CYELLOWBG2 = '\33[103m'
CBLUEBG2   = '\33[104m'
CVIOLETBG2 = '\33[105m'
CBEIGEBG2  = '\33[106m'
CWHITEBG2  = '\33[107m'

Berikut adalah kode untuk menghasilkan tes:

x = 0
for i in range(24):
  colors = ""
  for j in range(5):
    code = str(x+j)
    colors = colors + "\33[" + code + "m\\33[" + code + "m\033[0m "
  print(colors)
  x=x+5

65
2017-09-12 14:00



Cara favorit saya adalah dengan Berkah perpustakaan (pengungkapan penuh: saya menulisnya). Sebagai contoh:

from blessings import Terminal

t = Terminal()
print t.red('This is red.')
print t.bold_bright_red_on_black('Bright red on black')

Untuk mencetak batu bata berwarna, cara yang paling dapat diandalkan adalah mencetak ruang dengan warna latar belakang. Saya menggunakan teknik ini untuk menggambar progress bar di hidung progresif:

print t.on_green(' ')

Anda dapat mencetak di lokasi tertentu juga:

with t.location(0, 5):
    print t.on_yellow(' ')

Jika Anda harus mengotori dengan kemampuan terminal lain dalam perjalanan gim Anda, Anda bisa melakukannya juga. Anda dapat menggunakan format string standar Python untuk membuatnya mudah dibaca:

print '{t.clear_eol}You just cleared a {t.bold}whole{t.normal} line!'.format(t=t)

Yang menyenangkan tentang Blessings adalah bahwa ia melakukan yang terbaik untuk bekerja pada semua jenis terminal, bukan hanya yang ANSI-warna (sangat umum). Ini juga menyimpan urutan keluar yang tidak dapat dibaca dari kode Anda namun tetap ringkas untuk digunakan. Selamat bersenang-senang!


59
2017-12-18 00:32



menghasilkan kelas dengan semua warna menggunakan loop untuk iterasi setiap kombinasi warna hingga 100, kemudian tulis kelas dengan warna python. Salin dan tempel sesuai keinginan Anda, GPLv2 oleh saya:

class colors:
    '''Colors class:
    reset all colors with colors.reset
    two subclasses fg for foreground and bg for background.
    use as colors.subclass.colorname.
    i.e. colors.fg.red or colors.bg.green
    also, the generic bold, disable, underline, reverse, strikethrough,
    and invisible work with the main class
    i.e. colors.bold
    '''
    reset='\033[0m'
    bold='\033[01m'
    disable='\033[02m'
    underline='\033[04m'
    reverse='\033[07m'
    strikethrough='\033[09m'
    invisible='\033[08m'
    class fg:
        black='\033[30m'
        red='\033[31m'
        green='\033[32m'
        orange='\033[33m'
        blue='\033[34m'
        purple='\033[35m'
        cyan='\033[36m'
        lightgrey='\033[37m'
        darkgrey='\033[90m'
        lightred='\033[91m'
        lightgreen='\033[92m'
        yellow='\033[93m'
        lightblue='\033[94m'
        pink='\033[95m'
        lightcyan='\033[96m'
    class bg:
        black='\033[40m'
        red='\033[41m'
        green='\033[42m'
        orange='\033[43m'
        blue='\033[44m'
        purple='\033[45m'
        cyan='\033[46m'
        lightgrey='\033[47m'

41
2017-10-18 23:26



Coba kode sederhana ini

def prRed(prt): print("\033[91m {}\033[00m" .format(prt))
def prGreen(prt): print("\033[92m {}\033[00m" .format(prt))
def prYellow(prt): print("\033[93m {}\033[00m" .format(prt))
def prLightPurple(prt): print("\033[94m {}\033[00m" .format(prt))
def prPurple(prt): print("\033[95m {}\033[00m" .format(prt))
def prCyan(prt): print("\033[96m {}\033[00m" .format(prt))
def prLightGray(prt): print("\033[97m {}\033[00m" .format(prt))
def prBlack(prt): print("\033[98m {}\033[00m" .format(prt))

prGreen("Hello world")

34
2017-12-23 20:20