2011-08-15 21 views
10

下面的程序將引發錯誤:在python窗口的最後一個字符+詛咒

import curses 

def test(scr): 
    top = curses.newwin(1, 10, 0, 0) 
    top.addstr(0, 9, "X") 

curses.wrapper(test) 

它看起來像每當我試圖用addstr()在最後一行的最後一欄寫的一個漢字一個窗口(即使它小於屏幕),它會產生一個錯誤。我不想滾動,我不關心光標的位置。我想要的只是能夠在窗口的每個位置寫入字符。它有可能嗎?我怎樣才能做到這一點?

+0

相關:http://stackoverflow.com/questions/10877469 – augurar

回答

9

由於歷史的原因,它看起來像簡單地寫一個窗口的最後一個字符是不可能的。

我能找到的唯一解決方法就是將字符寫在最終目的地左邊的一個地方,然後用插入按鈕將其插入。下面的代碼將推動「X」來定位9:

top = curses.newwin(1, 10, 0, 0) 
top.addstr(0, 8, "X") 
top.insstr(0, 8, " ") 
6

原來,curses實際上確實結束了書面形式向最後一個位置:它只是產生一個錯誤之後的權利。

所以,如果你可以用下面的黑客/ inelegance生活:

#! /usr/bin/env python 
import curses 

def test(scr): 
    top = curses.newwin(1, 10, 0, 0) 
    try: 
     top.addstr(0, 9, "X") 
    except curses.error: 
     pass 

curses.wrapper(test) 

即,誘捕和忽略錯誤,那麼代碼將無論是在設計和實施簡單。

+0

我喜歡這種方法。它並不是很乾淨,但這裏是我處理它的方式:我在一個'BaseWindow'類中封裝了窗口(其類不清楚),在那裏我定義了所有的方法。該類通過實現'__getattr__'來解析窗口方法名稱,例如'addstr',這又會返回實際窗口的屬性。我將這種方法調整爲'addstr'方法:我的'BaseWindow'現在定義了自己的'addstr'方法,它試圖調用實際窗口的'addstr'方法,並默默地傳遞任何'curses.error'異常。 –