在python中等待输入1秒钟

时间:2019-05-11 20:29:12

标签: python curses

我正在尝试使用curses在Python中创建笔记应用程序。 左下角应该是每秒更新一次的时钟。

我现在遇到的问题是它要么必须睡眠1秒钟,要么等待输入。

是否可以等待输入1秒钟,如果没有输入注册就可以继续?

我要这样做的原因是为了防止在应用程序中移动时出现延迟。

我当时在想像多线程之类的东西可以完成这项工作,但是那里也存在一些问题。

这是我到目前为止的代码:

#!/usr/bin/env python3
import curses
import os
import time
import datetime
import threading


def updateclock(stdscr):
    while True:
        height, width = stdscr.getmaxyx()
        statusbarstr = datetime.datetime.now().strftime(' %A')[:4] + datetime.datetime.now().strftime(' %Y-%m-%d | %H:%M:%S')
        stdscr.addstr(height-1, 0, statusbarstr)

        time.sleep(1)

def draw_menu(stdscr):
    k = 0

    stdscr.clear()
    stdscr.refresh()

    threading.Thread(target=updateclock, args=stdscr).start()

    cursor_y = 0
    cursor_x = 0

    while (k != ord('q')):
    #while True:

        stdscr.clear()
        height, width = stdscr.getmaxyx()

        stdscr.addstr(height//2, width//2, "Some text in the middle")

        if k == curses.KEY_DOWN:
            cursor_y = cursor_y + 1
        elif k == curses.KEY_UP:
            cursor_y = cursor_y - 1
        elif k == curses.KEY_RIGHT:
            cursor_x = cursor_x + 1
        elif k == curses.KEY_LEFT:
            cursor_x = cursor_x - 1

        stdscr.refresh()
        #time.sleep(1)

        # Wait for next input
        k = stdscr.getch()


curses.wrapper(draw_menu)

代码看起来很混乱,这是我第一次主要关注curses函数。

是否可以仅等待输入k = stdscr.getch() 1秒钟?

1 个答案:

答案 0 :(得分:1)

默认情况下,getch会阻塞,直到您准备好输入字符为止。如果nodelay模式为True,则将得到准备好的字符的字符值(0-255),或者将得到-1表示没有准备好的字符值。

stdscr.nodelay(True) #Set nodelay to be True, it won't block anymore
k = stdscr.getch() #Either the next character of input, or -1