正在更新与终端尺寸相关的 window

Updating window relating to terminal size

我正在尝试创建一个使用 curses 的控制台程序,以便有一个漂亮的显示。为此,我创建了两个代表一半终端的 windows。

为此我有

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() 时,字符串不在合适的位置。 window 的内容会改变边框吗?

他们是这样的:

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

我希望它们在盒子里。我想我可以在它们之前添加 "\n " 之类的东西,但这是否可能更干净?

而且,一个看起来更复杂的问题:每 10 秒调用一次 display(),但是如果我调整终端的大小,self.stdscr.getmaxyx() 仍然保持不变。有没有办法了解终端的尺寸与以前不同?

非常感谢, 贾兹

在调用 display() 之前或之后,尝试使用 ch = self.stdscr.getchar(),这也会刷新 windows,然后使用 ch == curses.KEY_RESIZE 检查调整大小(ch == 410 也应该工作)。检查后,调用 getmaxyx() 并且您的值应该更新。

为了解决您的放置问题,我需要更多地了解您的字符串是什么样子,但您可以尝试将 y 和 x 位置向下移动(即 y-2),看看它是否有所改善。

编辑:对于字符串放置,您可以使用 window 上的 move 函数来定位光标。初始化 window 后,调用 window_stat.move(size_y+2,size_x+2)(您可以调整 2 直到找到合适的)。然后在第二个 window.

上做同样的事情