У меня возникли проблемы с созданием прямоугольника в Curses с использованием Python.
Это мой код:
import curses
from curses.textpad import Textbox, rectangle
def draw_menu(stdscr):
stdscr.clear()
stdscr.refresh()
while True:
stdscr.refresh()
writebox_uly = (int(stdscr.getbegyx()[0]))
writebox_ulx = (int(stdscr.getbegyx()[1]))
writebox_lry = (int(stdscr.getmaxyx()[0] * 0.7))
writebox_lrx = (int(stdscr.getmaxyx()[1] - 1))
rectangle(stdscr, writebox_uly, writebox_ulx, writebox_lry, writebox_lrx)
editwin_uly = (int(stdscr.getmaxyx()[0] * 0.7 + 1))
editwin_ulx = (int(stdscr.getbegyx()[1]))
editwin_lry = (int(stdscr.getmaxyx()[0] - 1))
editwin_lrx = (int(stdscr.getmaxyx()[1] - 2))
rectangle(stdscr, editwin_uly, editwin_ulx, editwin_lry, editwin_lrx)
def main():
curses.wrapper(draw_menu)
if __name__ == "__main__":
main()
Это создает два хороших прямоугольника, как на картинке ниже:
Вы можете заметить, что нижний правый угол нижнего поля не встроен.Это связано с тем, что editwin_lrx = (int(stdscr.getmaxyx()[1] - 2))
Эта строка задает нижнюю правую координату X (нижний правый угол), равную максимальной ширине терминала, минус 2
Изменение этого значения на editwin_lrx = (int(stdscr.getmaxyx()[1] - 5))
Ящик будет намного дальше влево.
, поэтому, теоретически, изменение его на editwin_lrx = (int(stdscr.getmaxyx()[1] - 1))
будет толкать его немного дальше вправо.
Но это не сбои.
Traceback (most recent call last):
File "temp.py", line 32, in <module>
main()
File "temp.py", line 29, in main
curses.wrapper(draw_menu)
File "/usr/lib/python3.6/curses/__init__.py", line 94, in wrapper
return func(stdscr, *args, **kwds)
File "temp.py", line 26, in draw_menu
rectangle(stdscr, editwin_uly, editwin_ulx, editwin_lry, editwin_lrx)
File "/usr/lib/python3.6/curses/textpad.py", line 16, in rectangle
win.addch(lry, lrx, curses.ACS_LRCORNER)
_curses.error: addch() returned ERR
Можно ли продлить правую сторону второго ящика до самого края, выровняв его с первым ящиком?