2009
10.18

Nesne tabanlı programlamadan sonra bir başka merak ettiğim konu ise: Konsol tabanlı bir program yaptığımda ona verdiğim komutları, hep uzun uzun yazmam gerekiyordu. Mesela bir oyun yaptınız. Konsoldaki haritanızda ileri,geri,sağ ve sola gitmesi için durmadan “ileri,geri …” yazmanız gerekiyor.

Fakat artık direk “WASD” tuşları olsun klavyedeki her tuşla programa komutlar gönderebileceksiniz. Yapmanız gereken “tty” modülünü kullanmak fakat bu modül çok ilginç ki, programı kapattıktan sonra bile sizin klavye komutlarınızı alıyor.  Bunun yerine hem Linux, hem Windows, hem de Macintosh’larda çalışacak bir yöntem ve sadece “tty” modülüyle değil de başka modülleri de kullanmalı. Çünkü tty modülü sadece Linux’da çalışıyor ve stabil değil.

Küçük bir google araması yaptığınızda karşınıza şöyle bir site geliyor. (Macintosh desteğini denemediğim için örneklere yazmayacağım ama o siteden Macintosh desteğine bakabilirsiniz.)

İlk önce tane .py dosyası oluşturun ve onun içine şunları yazın.

# -*- coding: utf-8 -*-
class _Getch(object):
    """Gets a single character from standard input.
       Does not echo to the screen."""
    def __init__(self):
        try:
            self.impl = _GetchWindows()
        except ImportError:
            self.impl = _GetchUnix()
 
    def __call__(self):
        return self.impl()
 
class _GetchUnix(object):
    def __init__(self):
        import tty, sys
 
    def __call__(self):
        import sys, tty, termios
        fd = sys.stdin.fileno()
        old_settings = termios.tcgetattr(fd)
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch
 
class _GetchWindows(object):
    def __init__(self):
        import msvcrt
 
    def __call__(self):
        import msvcrt
        return msvcrt.getch()
 
getch = _Getch()

Bunu sonra ana programınıza “form dosyanız import *” şeklinde ekleyin. Sonra kullanırken:

from alici import *
while True:
    karakter = getch().upper()
    print "Tıklanan tuş: %s"  % karakter

şeklinde yazabilirsiniz. Burada “getch().upper()” yazarken “upper()” yazmamızdaki mantık, gelen karakterin büyük ya da küçük problemi yaşamamak için hepsini büyük yapıp öyle işlemektir.  Bu yazdığınız “.getch()” bu haliyle Linux’da ve Windows’da çalışabilir.

Ayrıca bu olay PyGame gibi başka kütüphanelerle yapılabilir fakat eğer tamamen konsol tabanlı bir programda bunu istiyorsanız tek çözüm bu.

Not: Son örnekteki döngüden kurtulamazsanız kurtarıcınız “CTRL-C” olsun.

Benzer yazılar:

  1. Python’da Glob ile Dosya Yakalamak
  2. Python ile Nesne Tabanlı Programlama’ya Giriş
  3. Python ile .mp3 ve .midi dosyalarını açmak/dinlemek
  4. Python ile MySQL!

2 yorum yapılmış.

Yorumla!
  1. Gerçekten güzel bir bilgi, teşekkürler

  2. @Onur: Ne demek efendim :)