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

Kyl*_*ble 1 python curses draw

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

这是我的代码

import curses 

screen = curses.initscr()

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

finally:
    curses.endwin()
Run Code Online (Sandbox Code Playgroud)

任何建议?

Tho*_*key 11

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

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

import curses

screen = curses.initscr()

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

finally:
    curses.endwin()
Run Code Online (Sandbox Code Playgroud)


fur*_*ras 6

来自curses文档:

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

因此,curses要求您使用window对象的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()
Run Code Online (Sandbox Code Playgroud)

要么

#!/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()
Run Code Online (Sandbox Code Playgroud)

您可以使用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()
Run Code Online (Sandbox Code Playgroud)