gpt4 book ai didi

python - 我如何处理比 Python 中的 Curses 窗口长的行?

转载 作者:行者123 更新时间:2023-12-05 04:15:53 26 4
gpt4 key购买 nike

我希望我的 curses 应用程序在迭代时显示它正在使用的当前文件的绝对路径。这些可以比窗口更长,进入下一行。如果下一个文件路径较短,则不会覆盖长度差异,从而导致字符串损坏。解决此问题的最佳实践方法是什么?

编辑:Mac OS X 上的 Python 3 示例代码

from os import walk
import curses
from os import path

stdscr = curses.initscr()
curses.noecho()
for root, dirs, files in walk("/Users"):
for file in files:
file_path = path.join(root, file)
stdscr.addstr(0, 0, "Scanning: {0}".format(file_path))
stdscr.clearok(1)
stdscr.refresh()

最佳答案

假设您不想使用窗口,最简单的解决方案是:

  1. 使用addnstr而不是 addstr 永远不会写入超过该行的字符数,并且
  2. 使用clrtoeol删除新路径后的任何剩余字符。

例如:

from scandir import walk
import curses
from os import path

try:
stdscr = curses.initscr()
curses.noecho()
_, width = stdscr.getmaxyx()
for root, dirs, files in walk("/Users"):
for file in files:
file_path = path.join(root, file)
stdscr.addnstr(0, 0, "Scanning: {0}".format(file_path), width-1)
stdscr.clrtoeol()
stdscr.clearok(1)
stdscr.refresh()
finally:
curses.endwin()

如果您想通过创建一个大于全屏的窗口并将其剪切到终端来执行此操作,请继续阅读 newpad .对于一个简单的案例行,它不会更简单,但对于更复杂的案例,它可能就是您正在寻找的:

from scandir import walk
import curses
from os import path

try:
stdscr = curses.initscr()
curses.noecho()
height, width = stdscr.getmaxyx()
win = curses.newpad(height, 16383)
for root, dirs, files in walk("/Users"):
for file in files:
file_path = path.join(root, file)
win.addstr(0, 0, "Scanning: {0}".format(file_path))
win.clrtoeol()
win.clearok(1)
win.refresh(0, 0, 0, 0, height-1, width-1)
finally:
curses.endwin()

关于python - 我如何处理比 Python 中的 Curses 窗口长的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com