为什么我的诅咒盒子不会画出来?

时间:2013-09-16 23:26:17

标签: python draw curses

我正在玩诅咒,我无法在屏幕上画一个盒子。 我创建了一个有效的边框,但我想在边框中绘制一个方框

这是我的代码

import curses 

screen = curses.initscr()

try:
    screen.border(0)
    box1 = curses.newwin(20, 20, 5, 5)
    box1.box()
    screen.getch()

finally:
    curses.endwin()

任何建议?

2 个答案:

答案 0 :(得分:5)

来自curses docs

  

当您调用方法来显示或删除文本时,效果不会   立即出现在显示屏上。 ...

     

因此,curses要求您使用窗口对象的 refresh()方法明确告诉它重绘窗口。 ...

您需要screen.refresh()box1.refresh()正确的顺序。

工作示例

#!/usr/bin/env python

import curses 

screen = curses.initscr()

try:
    screen.border(0)

    box1 = curses.newwin(20, 20, 5, 5)
    box1.box()    

    screen.refresh()
    box1.refresh()

    screen.getch()

finally:
    curses.endwin()

#!/usr/bin/env python

import curses 

screen = curses.initscr()

try:
    screen.border(0)
    screen.refresh()

    box1 = curses.newwin(20, 20, 5, 5)
    box1.box()    
    box1.refresh()

    screen.getch()

finally:
    curses.endwin()

您可以使用immedok(True)自动刷新窗口

#!/usr/bin/env python

import curses 

screen = curses.initscr()
screen.immedok(True)

try:
    screen.border(0)

    box1 = curses.newwin(20, 20, 5, 5)
    box1.immedok(True)

    box1.box()    
    box1.addstr("Hello World of Curses!")

    screen.getch()

finally:
    curses.endwin()

答案 1 :(得分:2)

建议的答案比必要的更复杂。如果您使用newwin,它将使用subwin而不是plezi.io,而是与原始窗口共享内存,并且无需额外工作即可重新绘制。

以下是修改过的原始程序(单行更改):

import curses

screen = curses.initscr()

try:
    screen.border(0)
    box1 = screen.subwin(20, 20, 5, 5)
    box1.box()
    screen.getch()

finally:
    curses.endwin()