Библиотека проклятий Pythons и изменение размера

Я работал над графическим интерфейсом терминала с использованием python и Проклятия в течение последних нескольких дней и чувствую, что не добился никакого прогресса. Сейчас мне нужно создать две панели, каждая из которых занимает половину экрана минус 1-2 символа в качестве поля. Я хочу, чтобы эти окна могли обрабатывать изменение размера, поэтому, если пользователь решит увеличить или уменьшить свой экран, размер моих панелей изменится в соответствии с потребностями пользователя.

+---------------------------+ +---------------------------+
|                           | |                           |
|                           | |                           |
|                           | |                           |
|                           | |                           |
|                           | |                           |
|                           | |                           |
|                           | |                           |
|                           | |                           |
|                           | |                           |
|                           | |                           |
+---------------------------+ +---------------------------+

В этот раз я могу нарисовать окна и изменить их размер. Проблема в том, что если я уменьшу размер меньше, чем то, что сейчас установлено в моих полях, я получаю сообщение об ошибке.

_curses_panel.error: move_panel() returned ERR

Я не уверен, связано ли это с тем, как я проверяю и изменяю размер окна, или с ограничением Curses.

Не могли бы вы взглянуть на мой код и сообщить, схожу я с ума или нет?

import curses
import curses.panel
screen  = curses.initscr()
curses.start_color()
curses.noecho()
curses.curs_set(1)
screen.keypad(1)
curses.cbreak()
height,width = screen.getmaxyx()

window = curses.newwin(1,1,1,1)
window2 = curses.newwin(height -2 ,(width/2)-10, 1,width/2+1)

left_panel = curses.panel.new_panel(window)
right_panel = curses.panel.new_panel(window2)

window.border('|', '|', '-', '-', '+', '+', '+', '+')
window2.border('|', '|', '-', '-', '+', '+', '+', '+')

curses.panel.update_panels()
curses.doupdate()

running = True
x = 0
while ( running  ):
    height,width = screen.getmaxyx()
    k = window.getch()
    if k == curses.KEY_RESIZE:
        window2.erase()
        window.erase()
        h, w = screen.getmaxyx()
        window2.resize(height - 2 ,(width/2)-10)
        window.resize(height - 2,(width/2) - 10)
        left_panel.replace(window)
        right_panel.replace(window2)
        left_panel.move(0,0)
        right_panel.move(0,width/2)
        window2.border('|', '|', '-', '-', '+', '+', '+', '+')
        window.border('|', '|', '-', '-', '+', '+', '+', '+')
    if k == ord('q') or x >= 10:
        running = False
        curses.endwin()
    curses.panel.update_panels()
    curses.doupdate()

Этот код написан после того, как я провел много проб и ошибок, поэтому может быть какой-то код, который просто не имеет смысла, но вся логика для обработки изменения размера находится в этом выражении if.

if k == curses.KEY_RESIZE:

Я подозреваю, что проблема в том, что вы вызываете screen.getmaxyx() перед вызовом .getch(), который возвращает событие изменения размера, и поэтому вы используете старые размеры экрана, а не новые.

jasonharper 15.04.2018 03:48

Я люблю вас. Я бы отметил ваш комментарий как резолюцию, но не думаю, что смогу сделать это с комментариями.

IdecEddy 15.04.2018 04:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
995
0

Другие вопросы по теме