py25.png

Modul Console

Lze nalézt na http://effbot.org/zone/console-handbook.htm

Modul Console nabízí jednoduché rozhraní pro vytváření pseudografických aplikací pro konzoli OS MS Windows. Umožňuje jednoduchým způsobem zpracovávat události z klávesnice. V manuálu se hovoří i o odchytu událostí z myši, ale to nefunguje - vyzkoušeno na MS Windows 2000.

Velkou nevýhodou je absence metody na přímé získání dat z konzole, proto se v současné podobě hodí spíše jen na jednoduché prezentační aplikace s dosovou grafikou. Vypadá to, že autor modul dále nerozvíjí, takže současná verze je zřejmě i konečná.

Základem modulu je metoda getconsole(), která vrací instanci objektu console. Tato instance obsahuje základní metody pro práci s konzolí.

Několik jednoduchých ukázek:

Demo1 - barevný rám s textem:

import Console, random

title='DEMO1'
c = Console.getconsole() #vytvoreni instance konzole
c.cursor(0) #skryti kurzoru
c.title(title) #nastaveni titulku okna

for x in xrange(20):
    for y in xrange(20):
        c.text(x,y,'x',random.randint(1,15))

c.rectangle((5,8,15,13)) #vyrez uprostred ctverce
c.text(8,10,title,12) #vlozeni textu do vyrezu

Demo2 - mazání obrazovky pomocí metody page():

import Console, random,  time

title='DEMO2'
text='Na konci teto vety smazu celou obrazovku.'

c = Console.getconsole()
c.cursor(0)
c.title(title)

while 1:
    x = 0
    while (x != len(text)):
        for y in xrange(15):
            c.text(x,y,text[x],random.choice((10,14,15,7)))
        x += 1
        time.sleep(0.1)
    c.page()

Demo3 - odchyt události při psaní na konzoli:

import Console

title='DEMO3 - Psani na konzoli'
c = Console.getconsole()
c.title(title)

while 1:
    event = c.get() #vraci instanci tridy Event
    if  event.type == 'KeyPress':
        c.write(event.char)

Demo4 - zabalení aplikace do třídy, ukázka odchytnutí události a zobrazení deskriptorů události:

import Console

class App:
    def __init__(self,title):
        self.title = title
        self.c = Console.getconsole()
        self.c.title(self.title)
    def mainloop(self):
        while 1:
            event = self.c.get()
            print 'Event type:%s,char:"%s",keycode:%s,keysym:%s,state:%s,serial:%s' % (
                                         event.type,
                                         event.char,
                                         event.keycode,
                                         event.keysym,
                                         event.state,
                                         event.serial
                                         )

aplikace = App('DEMO4')
aplikace.mainloop()

Demo5 - ukázka metody scroll() - posouvaní textu po konzoli:

import Console, random

class App:
    def __init__(self,title):
        self.c = Console.getconsole()
        self.c.title(title)
        self.rectangle = (0,0,self.c.size()[0],self.c.size()[1])
        self.c.text(10,10,'Pro vytvoreni barevneho obdelniku stiskni Enter',14)
        self.c.text(10,12,'Posouvej text pomoci klaves Up,Left,Right,Down',14)
    def mainloop(self):
        while 1:
            event = self.c.get()
            if event:
                self.handleEvent(event)
    def handleEvent(self,event):
        direction = {'Left':-1,'Right':1,'Up':-1,'Down':1}
        if event.type == 'KeyPress':
            if event.keysym == 'Return':
                self._drawRectangle(self.rectangle)
            elif event.keysym in ('Left','Right'):
                self.c.scroll( self.rectangle, direction[event.keysym], 0 )
            elif event.keysym in ('Up','Down'):
                self.c.scroll( self.rectangle, 0, direction[event.keysym] )

    def _drawRectangle(self,rectangle):
        for x in xrange(rectangle[0],rectangle[2]):
            for y in xrange(rectangle[1],rectangle[3]):
                self.c.text(x,y,'x',random.randint(1,15))

aplikace = App('DEMO5')
aplikace.mainloop()