早期复极不能剧烈运动:用Python写NCurses UI | 酷壳 - CoolShell.cn

来源:百度文库 编辑:偶看新闻 时间:2024/05/04 13:57:32
Ncurses是一个能提供基于文本终端窗口功能的动态库. Ncurses可以:
  • 可以使用整个屏幕
  • 创建和管理一个窗口
  • 使用8种不同的彩色
  • 为您的程序提供鼠标支持
  • 使用键盘上的功能键

Ncurses可以在任何遵循ANSI/POSIX标准的Unix/Linux系统上运行,除此之外,它还可以从系统数据库中检测终端的属性,,并且自动进行调整,提供一个不受终端约束的接口。因此,Ncurses可以在不同的系统平台和不同的终端上工作的非常好。

mc工具集就是一个用ncurses写的很好的例子,而且在终端上系统核心配置的界面同样是用ncurses编写的. 下面就是它们的截图:

当然,在我们这篇文章中,我们不会教你怎么写NCurses程序,我们只是想告诉你如何用Python来写Ncurses的程序,示例会非常简单,点到为止。

在此之前,我们先简单的回顾一下如何使用Python的一些简单的语法。

先看看一个最简单的Python程序:

查看源代码打印帮助 1 print "How easy is this?"  2   3 x = 1 4 y = 2 5 z = x + y 6   7 print "Result of x + y is", z

程序很简单,我就不多说,把这个文件存成test.py,然后在命令行下调用python test.py就可以看到输出了。

下面我们再来看一个Python的函数定义——还是很简单,我也不用多说了。

查看源代码打印帮助 1 def saystuff(mystring): 2      print "You said:", mystring  3   4 saystuff("Bach rules") 5 saystuff("So does Telemann")

好,言归正传,让我们来看一下,如何在Python中使用NCurses,下面是一个小例程:

查看源代码打印帮助 01 import curses  02   03 myscreen = curses.initscr() 04   05 myscreen.border(0) 06 myscreen.addstr(12, 25, "Python curses in action!") 07 myscreen.refresh() 08 myscreen.getch() 09   10 curses.endwin()

注意这个示例中的第一行import curses,表明使用curses库,然后这个示像在屏幕中间输出“Python curses inaction!”字样,其中坐标为12, 25,注意,在字符界面下,80 x 25是屏幕大小,其用的是字符,而不是像素。下面是运行后的抓屏:

 最后,我们再来看一个数字菜单的示例:

查看源代码打印帮助 01 #!/usr/bin/env python 02   03 from os import system 04 import curses 05   06 def get_param(prompt_string): 07      screen.clear() 08      screen.border(0) 09      screen.addstr(2, 2, prompt_string) 10      screen.refresh() 11      input = screen.getstr(10, 10, 60) 12      return input 13   14 def execute_cmd(cmd_string): 15      system("clear") 16      a = system(cmd_string) 17      print "" 18      if a == 0: 19           print "Command executed correctly" 20      else: 21           print "Command terminated with error" 22      raw_input("Press enter") 23      print "" 24   25 x = 0 26   27 while x != ord('4'): 28      screen = curses.initscr() 29   30      screen.clear() 31      screen.border(0) 32      screen.addstr(2, 2, "Please enter a number...") 33      screen.addstr(4, 4, "1 - Add a user") 34      screen.addstr(5, 4, "2 - Restart Apache") 35      screen.addstr(6, 4, "3 - Show disk space") 36      screen.addstr(7, 4, "4 - Exit") 37      screen.refresh() 38   39      x = screen.getch() 40   41      if x == ord('1'): 42           username = get_param("Enter the username") 43           homedir = get_param("Enter the home directory, eg /home/nate") 44           groups = get_param("Enter comma-separated groups, eg adm,dialout,cdrom") 45           shell = get_param("Enter the shell, eg /bin/bash:") 46           curses.endwin() 47           execute_cmd("useradd -d " + homedir + " -g 1000 -G " + groups + " -m -s " + shell + " " + username) 48      if x == ord('2'): 49           curses.endwin() 50           execute_cmd("apachectl restart") 51      if x == ord('3'): 52           curses.endwin() 53           execute_cmd("df -h") 54   55 curses.endwin()

下面是运行时的显示:

如果你你了解NCurses编程,你可以看看相关的Linux HOW-TO的文章,链接在这里:Linux Documentation Project’s NCURSES Programming How To

(全文完)