簡體   English   中英

在python curses中使用getch()和backspace

[英]Using backspace with getch() in python curses

我希望用戶能夠使用getch()的工作方式輸入每個字符。 我還啟用了echo(),因為我想打印出用戶鍵入的每個字符。 但是,我還希望用戶能夠敲擊退格鍵,並擁有擊打退格鍵之前按下的鍵以將其從屏幕上刪除,就像退格鍵在文本編輯器中的工作方式一樣。 我怎樣才能做到這一點? 我正在使用帶有curses lib的python 3.6(很明顯)。 如果您想到目前為止看到我的代碼,這里是:

import curses

# ----- INIT -----
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)

# ----- PRINT -----
text = "Hello world"
stdscr.addstr(1, 0, text + "\n")
stdscr.refresh()

# ----- MAIN LOOP ------
while 1:
    c = stdscr.getch()
    if c == ord('q'):
        break

# ----- RESET TERMINAL -----
curses.echo()
curses.nocbreak()
stdscr.keypad(1)
curses.endwin()

您可以執行以下操作:禁用回顯,使用顯式庫調用來回顯除“ backspace”的通常選擇以外的字符:

import curses

# ----- INIT -----
stdscr = curses.initscr()
curses.cbreak()
curses.noecho()
stdscr.keypad(1)

# ----- PRINT -----
text = "Hello world"
stdscr.addstr(1, 0, text + "\n")
stdscr.refresh()

# ----- MAIN LOOP ------
while 1:
    c = stdscr.getch()
    if c == ord('q'):
        break
    if c == 8 or c == 127 or c == curses.KEY_BACKSPACE:
        stdscr.addstr("\b \b")
    else:
        stdscr.addch(c)

# ----- RESET TERMINAL -----
curses.echo()
curses.nocbreak()
stdscr.keypad(1)
curses.endwin()

Python curses參考沒有對addch詳細addch ,但是由於它是curses的包裝,因此您可以閱讀其手冊頁,了解如何解釋文字退格\\b使光標向后移動。 然后,該示例寫入一個空格(擦除其中的任何內容),然后將光標移回空白空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM