正在更新与终端尺寸相关的 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.
上做同样的事情
我正在尝试创建一个使用 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.