Проклятия Python, разделяющие окно терминала на 4 части — prefresh() вернул ОШИБКУ

#python #curses #python-curses

Вопрос:

Я запускаю многопроцессорную систему на Python, и я планировал использовать проклятия, чтобы разделить окно терминала на 4 квадранта и отобразить результаты каждого из процессов в одном из них.

Итак, конечный результат должен выглядеть примерно так:

 --------------------------------
|               |               |
|   PROCESS01   |   PROCESS02   |
|               |               |
---------------------------------
|               |               |
|   PROCESS03   |   PROCESS04   |
|               |               |
---------------------------------

 

До сих пор я пытался разбить окно на 4 площадки, вот так:

 
def main():

    screen = curses.initscr()
    cols_tot = curses.COLS
    rows_tot = curses.LINES
    cols_mid = int(0.5*cols_tot)   ## middle point of the window
    rows_mid = int(0.5*rows_tot)

    pad11 = curses.newpad(rows_mid, cols_mid)
    pad12 = curses.newpad(rows_mid, cols_mid)
    pad21 = curses.newpad(rows_mid, cols_mid)
    pad22 = curses.newpad(rows_mid, cols_mid)
    pad11.addstr(0, 0, "*** PROCESS 01 ***")
    pad12.addstr(0, 0, "*** PROCESS 02 ***")
    pad21.addstr(0, 0, "*** PROCESS 03 ***")
    pad22.addstr(0, 0, "*** PROCESS 04 ***")
    pad11.refresh(0,0, 0,0, rows_mid,cols_mid)
    pad12.refresh(0,cols_mid, 0,cols_mid, rows_mid,cols_tot-1)
    pad21.refresh(rows_mid,0, rows_mid,0, cols_tot-1,rows_mid)
    pad22.refresh(rows_mid, cols_mid, rows_mid,cols_mid, rows_tot-1,cols_tot-1)


    curses.napms(3000)
    curses.endwin()


if __name__ == '__main__':
    main()
 

но я получаю ошибку:

 File "screen_show.py", line 78, in <module> main()
                                                                                                          File "screen_show.py", line 46, in main
                                                                                                                                                     pad12.refresh(0,cols_mid, 0,cols_mid, rows_mid,cols_tot-1)
_curses.error: prefresh() returned ERR
 

Комментарии:

1. prefresh вернет ошибку, если координаты экрана (последние 4 параметра) находятся за пределами физических границ экрана (см. Код ).