我想做一个有两个窗口的终端应用程序。第一个窗口应该读取用户键入的命令(就像在vim中键入:一样),而第二个窗口应该显示定期更新的内容(例如:计时器)
为了使显示窗口和命令窗口分别工作,我使用多线程策略。它一开始就有用,但很快当我写了两封以上的信时,显示器就坏了。(右上面板)。
window.getstr部分似乎仍然正常工作,因为当我键入quit+时程序将终止
显示器出问题了,我想是和移动光标或其他东西有关。有人能指出如何正确地做这件事吗?或者,有没有关于使用python和curses创建类似vim的接口的文章?
代码如下:import sys, os, json, time, datetime, math, curses, thread
COUNTER = 0
def my_raw_input(window, r, c, prompt_string):
curses.echo()
window.addstr(r, c, prompt_string)
window.refresh()
input = window.getstr(r + 1, c)
return input
def count(window):
global COUNTER
while True:
window.addstr(3, 0, '%d'%(COUNTER))
if COUNTER >= 1000:
COUNTER = 0
COUNTER += 1
window.refresh()
def main(args):
# create stdscr
stdscr = curses.initscr()
stdscr.clear()
# allow echo, set colors
curses.echo()
curses.start_color()
curses.use_default_colors()
# define 2 windows
command_window = curses.newwin(3, 30, 0, 0)
display_window = curses.newwin(6, 30, 5, 0)
command_window.border()
display_window.border()
# thread to refresh display_window
thread.start_new_thread(count, (display_window,))
# main thread, waiting for user's command.
while True:
command = my_raw_input(command_window, 0, 0, 'Enter your command :')
if command == 'quit':
break
else:
command_window.addstr(1, 0, ' '*len(command))
curses.endwin()
curses.wrapper(main)
编辑:与建议的“重复问题”不同,我需要获取字符串,而不是只检测按键。
谢谢你。