4

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

这是我的代码

import curses 

screen = curses.initscr()

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

finally:
    curses.endwin()

有什么建议吗?

4

2 回答 2

12

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

这是修改后的原始程序(一行更改):

import curses

screen = curses.initscr()

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

finally:
    curses.endwin()
于 2017-04-12T23:59:10.287 回答
9

来自诅咒文档

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

因此,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()
于 2013-09-17T02:24:48.000 回答