可爱的 Python:Curses 编程
2007-03-29 11:59:25 来源:WEB开发网此函数组合了几个 curses 特性。它做的第一件事就是创建另一个窗口对象。由于这个新窗口对象是 "File" 选择项的实际下拉菜单,所以程序使用 .box() 方法围着它绘制了一个框架。在窗口 s 中,程序绘制了几个下拉菜单选项。使用了一种稍微费力的方法突出显示了每个选项的热键,这样就与选项描述的其余部分形成了对比。(请查看完整源码(请参阅 参考资料 )中的 topbar_menu() 以学习一种能稍微自动处理突出显示的方法。)最后的 .addstr() 调用将光标移到缺省菜单选项。如同主屏幕一样, s.refresh() 实际上显示了画到窗口对象上的元素。
绘制了下拉菜单后,程序使用简单的 s.getch() 调用来获取用户的选择项。在演示应用程序中,菜单只响应热键,但不响应箭头键或可移动突出显示栏。可以通过捕捉附加键操作并在下拉菜单中设置事件循环来构建这些更复杂的菜单功能。但这个例子已经足够说明这种概念了。
接着,程序将刚读取的击键与各种热键值做比较。在本例中,热键的大小写都可以激活下拉菜单选项,并且可以使用 ENTER 键激活缺省选项。(curses 特殊键常量看上去并不完全可靠,我发现必须添加实际的 ASCII 值 "10" 来捕捉 ENTER 键。)请注意,如果要执行字符值比较,那么要将字符串封装到 ord() 内置 Python 函数中。
当选中 "Input" 选项时,程序会使用 .getstr() 方法,该方法提供带有原始编辑能力的字段输入(可以使用退格键)。由 ENTER 键终止输入,然后方法返回输入的值。通常会像上例中一样,将这个值分配给一个变量。
为了在视觉上区别输入字段,我使用了一点小技巧,预先向将要发生数据输入的区域添加了下划线。无论如何,这都是必要的,但它添加了一种视觉效果。由以下这行代码画出下划线:
screen.addstr(5,33, " "*43, curses.A_UNDERLINE)
当然,程序还必须除去下划线,这项工作在 draw_dict() 刷新函数中由以下这行代码执行:
screen.addstr(5,33, " "*43, curses.A_NORMAL)
结束语
这里概述的技术以及在完整应用程序源代码(请参阅 参考资料 )中使用的那些技术应该可以让您初步了解 curses 编程。请使用它来编写您的应用程序。它并不难使用。告诉您一个好消息,除了 Python 以外,有许多语言可以访问 curses 库,因此您学到的使用 Python curses 模块的知识同样适用于其它语言。
如果经检验,基本 curses 模块不能满足您的要求,“参考资料”节中提供了许多模块的链接,他们增添了 curses 的功能并提供了非常好的发展方向。
更多精彩
赞助商链接