2017-07-12 4 views
0

curses.newwin()を呼び出して作成された組み込みウィンドウクラスcursesを拡張したいと思います。Python3でcursesウィンドウクラスを拡張するには?

しかし、その下の¿newwin?プレースホルダを置き換えるべきクラスの実際の名前を見つけるのは難しいです。

#!/usr/bin/python3 

import curses 

class Window(curses.¿newwin?): 

    def __init__(self, title, h, w, y, x): 
     super().__init__(h, w, y, x) 
     self.box() 
     self.hline(2, 1, curses.ACS_HLINE, w-2) 
     self.addstr(1, 2, title) 
     self.refresh() 

def main(screen): 
    top_win = Window('Top window', 6, 32, 3, 6) 
    top_win.addstr(3, 2, 'Test string added.') 
    top_win.refresh() 
    ch = top_win.getch() 

# MAIN 
curses.wrapper(main) 
+1

ドキュメントからは、cursesウィンドウクラスがパブリックAPIの一部であるとは思われません。むしろ、文書化された関数のいくつかは、型が指定されていない、いくつかの文書化されたメソッドを持つ半不透明な "window"オブジェクトを返します。あなたのクラスの継承ではなく、カプセル化の使用を検討しましたか?適切な '__getattr__'メソッドを書くと、あなたの例で示したことの多くがうまくいくでしょう。 – Blckknght

答えて

1

だから私は自分自身のAPIを書くようなものですカプセル化ではなく、継承、に行ってきました。私もdiscussed in a separate SE questionであるglobal class patternを適用しました。

#!/usr/bin/python3 

import curses 

class win: 
    pass 

class Window: 

    def __init__(self, title, h, w, y, x): 
     self.window = curses.newwin(h, w, y, x) 
     self.window.box() 
     self.window.hline(2, 1, curses.ACS_HLINE, w-2) 
     self.window.addstr(1, 2, title) 
     self.window.refresh() 

    def clear(self): 
     for y in range(3, self.window.getmaxyx()[0]-1): 
      self.window.move(y,2) 
      self.window.clrtoeol() 
     self.window.box() 

    def addstr(self, y, x, string, attr=0): 
     self.window.addstr(y, x, string, attr) 

    def refresh(self): 
     self.window.refresh() 

def main(screen): 
    win.top = Window('Top window', 6, 32, 3, 6) 
    win.top.addstr(3, 2, 'Test string added.') 
    win.top.refresh() 
    ch = win.top.getch() 

# MAIN 
curses.wrapper(main) 
関連する問題