On 02Mar2019 15:16, boB Stepp <robertvst...@gmail.com> wrote:
I wanted to be able to change the background screen color of a
terminal window using curses.  My weak Google-Foo did not turn up a
clear example of how to do this despite much searching.  The two
_obvious_curses methods to attempt this seemed to be
window.bkgdset(ch, attr) to initially set a window's background
attributes and window.bkgd(ch, attr) to change them to new values.
The thing that has puzzled me is that "ch" is a mandatory parameter to
supply.

Remember that the Python curses module is a shim for the curses (or ncurses) C library. So "man 3 curses" gets you the main library page, and there are distinct manual entries for the various functions.

On my machine (a Mac) the curses(3) manual entry has a section named "Routine Name Index" thus:

  Routine Name Index
      The following table lists each curses routine and the name of the man‐
ual page on which it is described. Routines flagged with “*” are ncurses-specific, not described by XPG4 or present in SVr4.

and then there's a long table of functions and the match manual entry name. bkgdset is listed as in the curs_bkgd(3) entry, so run "man curs_bkgd" to view that manual entry. It describes the bkgdset, wbkgdset, bkgd, wbkgd, getbkgd functions in some detail.

Also, the curs_color manual entry talks about terminal colours in detail. So "man curs_color".

So after a variety of experimental efforts I came up with the
following approach which seems to do what I want to do -- just change
the terminal's background color at will.  But since I did *not* locate
any clear examples online on how to do this, I cannot help but wonder
if there is an easier approach to do what I want to do?

I would be inclined to call getbkgd() and then modify what it gives you as desired, then call bkgdset(). Untested.

My code follows.  As always I am open to any constructive criticism
even if it is off this email's topic, though this code is not meant to
be a polished product.
[...]
   # Fill screen with spaces to color screen background:
   for y in range(max_height):
       try:
           stdscr.addstr(y, 0, ' ' * max_width)
       except curses.error as error:
           if y == max_height - 1:
               # Ignore error from writing to lower right-hand screen corner:
               pass
           else:
               raise error

Is the painting of the screen with spaces actually required? I would have thought not (again, untested). The main window (stdscr) should start filled with spaces.

[Reads more closely...] probably you want to call bkgd() or wbkgd() instead. "man curs_bkgd" says:

  bkgd
      The bkgd and wbkgd functions set the background property of the
      current or  specified  window  and  then  apply this setting to every
      character position in that window:
      ·   The rendition of every character on the screen is  changed to
          the new background rendition.
      ·   Wherever  the former background character appears, it is changed
          to the new background character.

Cheers,
Cameron Simpson <c...@cskk.id.au>
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to