Обновление окна, связанного с размером терминала - PullRequest
0 голосов
/ 04 октября 2018

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

Для этого у меня есть

def display(self):
    size_y,size_x = self.stdscr.getmaxyx()
    window_stat = curses.newwin(size_y,size_x//2-5,0,0)
    window_alert = curses.newwin(size_y,size_x//2-5,0,size_x//2+5)
    window_alert.border()
    window_stat.border()
    window_alert.addstr(self.alert2string())
    window_stat.addstr(self.stat2string())
    self.stdscr.refresh()
    window_stat.refresh()
    window_alert.refresh()`

У меня все равно есть две проблемы.Прежде всего, когда я использую .border(), строки не в хороших местах.Меняет ли рамка что-либо с содержимым окна?

Вот как они выглядят:

No data has been collected in the last 10 seconds.────┐          No alert.─────────────────────────────────────────────┐
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
│                                                     │          │                                                     │
└─────────────────────────────────────────────────────┘          └─────────────────────────────────────────────────────┘

Я хочу, чтобы они были в коробке.Я думаю, я могу просто добавить как "\n " перед ними, но возможно ли, чтобы это было более чисто?

И, проблема, которая выглядит более сложной: display() вызывается каждые 10 секунд, но еслиЯ изменяю размер терминала, self.stdscr.getmaxyx() остается в любом случае.Есть ли способ понять, что терминал имеет другой размер, чем раньше?

Большое спасибо, Djaz

1 Ответ

0 голосов
/ 04 октября 2018

До или после вызова display(), попробуйте использовать ch = self.stdscr.getchar(), который также обновляет окна, затем проверьте изменение размера, используя ch == curses.KEY_RESIZE (ch == 410 также должно работать).После проверки позвоните getmaxyx() и ваши значения должны быть обновлены.

Мне нужно больше знать о том, как выглядят ваши строки, чтобы решить проблему размещения, но вы можете попробовать переместить позиции y и x вниз (т. Е. y-2) и посмотреть, улучшится ли она.

Редактировать: Для размещения строки вы можете использовать функцию move в вашем окне для позиционирования курсора.После того, как вы инициализируете окно, позвоните window_stat.move(size_y+2,size_x+2) (вы можете отрегулировать 2, пока не найдете подходящую подгонку).Затем сделайте то же самое со вторым окном.

...