我正在使用Python的诅咒模块。在stdscr中,每当我按enter键时,诅咒就移动到同一行的第一列。我对此有几个问题。
发布于 2015-08-27 16:38:04
您需要调用curses.noecho()作为初始化的一部分。
screen.move(y,x)将移到一个绝对位置。screen.getyx()会告诉你你现在的位置。
您可能认为可以调用getch()并将结果与KEY_ENTER进行比较。实际上,您需要检查更多的值。根据终端设置、使用的库和月亮的相位,您可能需要检查换行符(又名\n、^J、ASCII 10)或回车(\r、^M、ASCII 13)。
c = screen.getch()
if c == curses.KEY_ENTER or c == 10 or c == 13:
# I hit ENTER示例程序:
import curses
# Thanks, http://www.ipsum-generator.com
ipsum = '''Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer
nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla
quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent
mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum
lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent
per conubia nostra, per inceptos himenaeos.'''
try:
# Standard startup. Probably don't need to change this
screen = curses.initscr()
curses.cbreak()
curses.noecho()
screen.keypad(True)
# Silly program to write to the screen,
# wait for either <ENTER> or <Q>.
# On <ENTER>, mess with the screen.
# On <Q>, exit.
screen.addstr(0, 0, ipsum)
screen.move(0, 0)
screen.refresh()
i = 0
j = 0
while True:
c = screen.getch()
if c == ord('q'):
exit(0)
if c == curses.KEY_ENTER or c == 10 or c == 13:
i += 1
if i % 3 == 0:
screen.addstr(0, 0, ipsum.lower())
if i % 3 == 1:
screen.addstr(0, 0, ipsum.upper())
if i % 3 == 2:
screen.addstr(0, 0, ipsum)
screen.move(0, 0)
if c == curses.KEY_DOWN:
y, x = screen.getyx()
maxy, maxx = screen.getmaxyx()
screen.move((y+1) % maxy, x)
screen.refresh()
finally:
# Standard shutdown. Probably don't need to change this.
curses.nocbreak()
screen.keypad(0)
curses.echo()
curses.endwin()参考资料:
https://stackoverflow.com/questions/32252733
复制相似问题