Edit detail for Console revision 2 of 1

2
Editor: geon
Time: 2011/10/13 21:08:01 GMT+2
Note: pridavani znacek 2x-3x

changed:
-
.. image:: py25.png
   :align: right

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() 



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()