1

我正在编写一个基于状态机的 python 程序,该程序当前将机器的状态打印到控制台。这作为日志很有用,但不是最用户友好的界面。

我很想知道是否有在 Python 中使用 ncurses 的好例子,最好是 OOP 中的一些东西,它在表格中呈现变化的信息(例如:状态信息)。

已经curses在 python 中尝试过这个包,但是它不像我想要的那样 OO。

这是流当前的样子:

manager:    st_machine_01    state INITIALISE
manager:    st_machine_01    state GET_LIST_PAGES
manager:    st_machine_02    state EXIT
manager:    st_machine_03    state INITIALISE
manager:    st_machine_03    state GET_LIST_PAGES
manager:    st_machine_04    state EXIT
manager:    st_machine_05    state INITIALISE
manager:    st_machine_05    state GET_LIST_PAGES
manager:    st_machine_01    state GET_LIST_PAGES
manager:    st_machine_05    state GET_LIST_PAGES
manager:    st_machine_05    state EXIT
manager:    st_machine_01    state GET_LIST_PAGES
manager:    st_machine_06    state INITIALISE
manager:    st_machine_06    state GET_LIST_PAGES
manager:    st_machine_01    state GET_LIST_PAGES
manager:    st_machine_06    state GET_LIST_PAGES
manager:    st_machine_01    state EXIT
manager:    st_machine_06    state GET_LIST_PAGES
manager:    st_machine_07    state INITIALISE
manager:    st_machine_07    state GET_LIST_PAGES
manager:    st_machine_06    state GET_LIST_PAGES
manager:    st_machine_06    state EXIT

而在上述流的最后一点呈现的 ncurses “表”看起来像:

manager:    st_machine_01    state EXIT
manager:    st_machine_02    state EXIT
manager:    st_machine_03    state GET_LIST_PAGES
manager:    st_machine_04    state EXIT
manager:    st_machine_05    state EXIT
manager:    st_machine_06    state EXIT
manager:    st_machine_07    state GET_LIST_PAGES

我正在寻求在 Python 2.7 64bit、Windows 7 64bit 上执行此操作。

4

3 回答 3

1

如果curses还不够(由于某些未描述的原因),pycdkurwid可能更适合您的需求。

于 2013-08-16T02:11:14.500 回答
0

.

ncurses 包不是非常面向对象的,但是,您肯定会从使用面向对象的方法中受益。

class screen {
  class rectangle {
    class line { 
      string default_text="please enter a command (press 'e' to list available events) >> ";
    }
  }
}

sm_window = new screen("sc1").new rectangle( "log_rect", lines=7 );
log_rect.line[7] = "st_machine_05 changed to Get_List_Pages from state Exit";

如果您在这几个类中保留对 ncurses 包的所有访问权限,那么与在现有应用程序中使用 ncurses 调用相比,您将走得更远。

如果由于某种原因您没有将所有字段设为私有,您可以直接从屏幕类访问所有必需的程序数据。

于 2013-08-16T03:38:27.153 回答
0

您可以使用标准curses模块。你可以在这里找到它的文档。

于 2013-08-16T02:01:33.387 回答