2017-04-13 10 views
-1

があります。誰かが私がコードで間違っていたことを教えてもらえますか?タイマー機能がボックスに表示されないのはなぜですか? addstrボックス内の機能curses

import curses 
from datetime import datetime 

stdsrc= curses.initscr() 

SPACE_KEY = ord(' ') 

box1 = curses.newwin(20, 30, 10, 10) 
box1.box() 
def run(win): 

    win.timeout(1000) 
    start = datetime.now() 
    while True: 
     now = datetime.now() 
     minutes, seconds = divmod((now - start).total_seconds(), 60) 
     win.addstr(0, 0, "%02d:%02d" % (minutes, round(seconds))) 

     c = win.getch() # c variable to get user character 
     if c == SPACE_KEY: 
      break 

box1.refresh() 

curses.wrapper(run) 

curses.endwin() 

答えて

0

最初の2つの引数は、テキストを開始するための座標です。あなたのコードでは0,0の座標でテキストを開始しますが、ボックスは20,30の座標から始まります。

0

タイマーは、これらの二つの理由のボックスに表示されません。

  • タイマーが(getchを使用して)間違ったウィンドウに書き込まれ、そしてあなたが読んでいる

  • 窓れますボックスを再描画して上書きします。ここで

はボックスwinサブウィンドウなり、改版一例であり、(方法で)離れたボックスの境界線からのタイマーを動かす:

import curses 
from datetime import datetime 

SPACE_KEY = ord(' ') 

def run(win): 
    box1 = win.subwin(20, 30, 10, 10) 
    box1.box() 

    win.timeout(1000) 
    start = datetime.now() 
    while True: 
     now = datetime.now() 
     minutes, seconds = divmod((now - start).total_seconds(), 60) 
     box1.addstr(1, 1, "%02d:%02d" % (minutes, round(seconds))) 
     box1.refresh() 

     c = win.getch() # c variable to get user character 
     if c == SPACE_KEY: 
      break 

stdsrc = curses.initscr() 
curses.wrapper(run) 

initscrへの呼び出しがあります不要; curses.wrapperです。そのinitscrコールを削除すると、画面は白黒で表示されます。しかし、正しい色を得ることはもう一つの疑問です。

+0

こんにちは、ありがとうございます。これは今、ボックスの座標を調整する必要があるだけで、@ maxymooのようなタイマーは上で述べたように機能します。 Box1は、(1、1)の座標の外にあるので、20,30の座標で始めるべきではありません。ですから、私がやったことはbox1の座標を0、0、timerを10,20(ボックスの真中付近)にすることです。私はこのことを初めて知ったので、あなたはこの本を学ぶことができるいくつかの本やウェブサイトをお勧めしますか? – user7519

関連する問題