在 python 中等待输入 1 秒
Wait for input for 1 second in python
我正在尝试使用 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秒?
默认情况下,getch 将阻塞,直到您准备好字符输入。如果 nodelay mode 为 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
我正在尝试使用 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秒?
默认情况下,getch 将阻塞,直到您准备好字符输入。如果 nodelay mode 为 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