在寫curses程序想想看看你們的做法

jacklam 发布于 2013/01/16 17:11
阅读 500
收藏 0

是這樣的:在寫一個郵件程序用curses做介面,大家都知道一個程序中或多或少都有詢問框架

我覺得如果每個詢問都做一個dialog比較麻煩你們會怎麼做呢,我的方案很差勁所以想參考一下大家的做法,

如果有代碼就更昜理解。謝謝各位

加载中
0
红尘一人
红尘一人
采用安装程序那种堆栈形式的 或者集成为多页签(类似浏览器)的样子 
0
jacklam
jacklam

我明白你說的是甚麼,你說的比較像詢問設定

我需要的大約是這樣子. (你是否確認剷除.) (你是否要儲存)(你是否確認要轉寄)等等....  

我說說我的做法吧:寫一個函數,並且有各種參數有7個吧,大部份已預設例如YES  /NO 可以只輸入詢問的字串,這樣大約用了30多行代碼吧


0
haitao
haitao
显示对话框前,先保存自己将覆盖的位置的内容
再显示自己
选择完成后,关闭自己,再恢复之前保存的内容到对应位置
0
jacklam
jacklam
import curses
scr = curses.initscr( )
curses.cbreak( )
curses.noecho( )
y, x = scr.getmaxyx( )
def dialog(self=None, Y_X_optionList=None, Y_X_messageList=None, execute=None):
    pos_y, pos_x = int(y/2)-6, int(x/2)-22
    box_h, box_w = 8, 44
    win = curses.newwin(box_h, box_w, pos_y, pos_x)
    win.keypad(1)
    if Y_X_optionList != None:
        exec = exeute
    else:
        Y_X_optionList = [[6,10,'<CANCEL>'], [6,30,'<YES>']]
        exec = {0: 'return 0', 1: 'return 1'}
    def __displayMessage( ):
        for msg_y, msg_x, message in Y_X_messageList:
            win.addstr(msg_y, msg_x, message)
    def __displayOptions( ):
        index = 0
        win.clear( )
        win.box( )
        __displayMessage( ) 
        for opt_y, opt_x, option in Y_X_optionList:
            win.addstr(opt_y, opt_x, option)
            index += 1
            if index-1 == position:
                win.addstr(6, opt_x, option, curses.A_BOLD | curses.A_STANDOUT)
        win.refresh( )
    position = 0
    optnum   = len(Y_X_optionList) - 1
    while True:
        __displayOptions( )
        key = win.getch( )
        if key == curses.KEY_LEFT and position > 0 :
            position -= 1
        elif key == curses.KEY_RIGHT and position < optnum:
            position += 1
        elif key == ord('\n'):
            eval(exec[posit])
dialog(Y_X_messageList=[[2, 4, 'Hello this is a test'], [3, 4, 'python curses dialog']])                                                                                              

Sorry 我剛沒說清楚,其實不只改變其標題字串,還有要改變其選項,可能是改變選項行為

增加或減少選項,我剛剛做了一個版本,不過不太好

返回顶部
顶部