2012-05-21 19 views
16

Olası Çoğalt: Ne arıyorum
Python read a single character from the userTuş takımı komut satırında python nasıl kabul edilir?

piton kullanarak ok tuşlarıyla bir robotu kontrol edebilmek için. Ve benim fikrim sorun Kullanıcıların giriş almak için nasıl bilmiyorum olmasıdır Ancak böyle bir şey görünüyordu kodu ...

#!/usr/bin/env python 
# control a robot using python 
exit = 0 
while exit == 0: 
    keypress = ##get keypress, if no key is pressed, continue## 
    if keypress == 'q': 
    exit = 1 
    break 
    elif keypress == KEY_UP: 
    ##robot move forward## 
    elif keypress == KEY_DOWN: 
    ##robot move backward## 
print "DONE" 

uygulamaktı. Ve robotun bir ekran kullanmamasından dolayı bulduklarımdan pygame gibi GUI tabanlı bir çözüm kullanamıyorum.

Herhangi bir yardım için çok teşekkür ederiz!

+0

(http://stackoverflow.com/questions/510357/python-read-a-single-character-from-the-user), çeşitli çözümler sahip olan. – Junuxx

+0

['curses'] 'a bakmak isteyebilirsiniz (http://docs.python.org/library/curses.html). –

+0

Bu soruya bakıyordum ama aradığım şeyin olup olmadığını anlayamadım, çünkü bir linux çözümü arıyordum ve platformlar arası ihtiyaçlardan dolayı gerçekten karmaşık görünüyordu. Lanetlere baktım, ama nasıl kullanacağına dair iyi bir öğretici var mı? Elimden gelenin en iyisi Python Docs'du ve onlar sadece şimdiye kadar gittiler. – Elmer

cevap

29

Basit bir küfür örneği. Ayrıntılar için curses module belgelerine bakın. [Bu soruya] ile aynıdır

import curses 
stdscr = curses.initscr() 
curses.cbreak() 
stdscr.keypad(1) 

stdscr.addstr(0,10,"Hit 'q' to quit") 
stdscr.refresh() 

key = '' 
while key != ord('q'): 
    key = stdscr.getch() 
    stdscr.addch(20,25,key) 
    stdscr.refresh() 
    if key == curses.KEY_UP: 
     stdscr.addstr(2, 20, "Up") 
    elif key == curses.KEY_DOWN: 
     stdscr.addstr(3, 20, "Down") 

curses.endwin() 
+0

Neden bir kez bir harf tuşuna bastığımda iki harfin görüntüleniyor? Getch, imlecin, addch'i koyduğu yerin sağına hareket ediyor gibi görünüyor. Bu nedenle, bir sonraki tuşa bastığımda, 20, 25'in solunda görüntülenecek ve daha sonra 20, 25'de aynı harfi ekrana iki karakter bırakarak gösterir. Sanırım getch, 20, 25'in sağdaki mektubun gösterilmesini engellemiyor mu? Girdiğim şeylerin görüntülenmesini nasıl engelleyebilirim? – allyourcode

+1

allyourcode - 'curses.noecho()' yi ekleyin ('cbreak' için çağrı yapıldıktan sonra). Daha sonra küfürler anahtarı otomatik olarak yayınlamayacak, sadece senaryoya sahip olacak. – Ian

İlgili konular