- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在不清除屏幕的情况下在 Python 下使用 Curses。原因是我希望我的应用程序在现有屏幕上弹出一个简单的小菜单并很快退出。在退出时将弹出菜单的丑陋部分留在屏幕上是可以接受的,尽管不是首选。这个想法是将它用于快速实用的系统管理应用程序和脚本,其中美学并不重要。
Python init 函数似乎总是清除屏幕。我还记得几年前看到一个非 Python 应用程序做我喜欢的事情,所以我知道这是可能的,至少在 C Curses 程序中。
最佳答案
我不会说“它无法完成”,但我会说“它无法完成”有库存,开箱即用的 Curses/NCurses。
根本问题在于,curses 库在初始化时无法访问终端的当前状态,尤其是当前正在显示哪些字符和字形。
在过去的 PC 上,屏幕是内存映射的,因此当程序运行时,它可以访问现有的屏幕状态,以便捕获并可能在以后恢复它。
对于通用的智能终端来说,不一定如此。在 Linux 或 Mac 上,终端类型是某种“xterm”。在 Windows 控制台终端上,它是 ANSI 风格的终端(注意 xterm 也是一种 ANSI 终端)。终端类型是 termcap/terminfo 库使用的代码,curses 依赖它来知道如何移动光标、删除字符和行、设置颜色或反转视频等。
所有curses 与屏幕的交互都是通过打印ESCape 序列,而不是操纵内存。它不适用于帧缓冲区。
如果您查看 XTerm escape sequences 的列表,您将看到没有任何内容可以将屏幕内容报告回主机程序。但是,有一个备用的帧缓冲区。这方面的一个例子可能是 vim
.当您使用 vim
编辑文件时, vim
占据整个屏幕。但是当您退出时,您的原始屏幕会恢复。 vim
正在切换到备用屏幕缓冲区,并在那里执行所有操作,然后在退出时恢复主屏幕缓冲区。但这是一个简单的切换练习,vim
不“知道”,也无法访问原始屏幕缓冲区的内容。
如果您使用 Linux 控制台(您可以在其中使用 FKeys 切换屏幕)或 GNU Screen 之类的实用程序,则它们是不同的。它们依赖于不同的概念(Linux 控制台的设备驱动程序和 GNU Screen 的伪终端),并且整个程序维护每个屏幕本身的状态。但是这个信息不适用于我所知道的通用程序。如果是,则是通过某种专有方法而不是 Curses。
关于不清除屏幕的 Python 诅咒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23003011/
所以我有一个用 ncurses 制作的基本“贪吃蛇”游戏。 添加时 start_color(); init_color(COLOR_BLUE, 0, 0, 0); init_pair(
我想处理来自 stdin 的管道/终端,但同时,我希望我的其他操作继续处理,例如 上/下菜单 . fgets完成处理管道和屏幕渲染,但是,wgetch变得没有反应,所以我不能在开关内做任何事情。要关闭
我想在不清除屏幕的情况下在 Python 下使用 Curses。原因是我希望我的应用程序在现有屏幕上弹出一个简单的小菜单并很快退出。在退出时将弹出菜单的丑陋部分留在屏幕上是可以接受的,尽管不是首选。这
我已经开始用Python语言编写控制台了。太神奇了。但是,我尝试使用 curses 创建输入框,如下所示。我一直坚持如何放置输入行并在控制台的输入位置上写入输入。这部分你能帮我吗?我忘了问_是否可以使
我正在尝试创建这个程序,我在 stdscr 上并排打印两个窗口。我创建了“菜单”类来在一个地方声明整个屏幕的所有内容,我在 main 中创建了一个“菜单”对象(“menu_principal”),但没
大家好,我正在 Unix 中用 C 语言做作业,任务是制作一个简单的乒乓球游戏。我现在已经开始玩游戏了,除了有一个烦人的部分, Racket 正后方不断有一个闪烁的光标。我该如何关闭它? 这是截图。
我正在尝试创建一个交互式命令行程序,似乎 Mono-Curses是我需要的。但我对如何使用它感到非常困惑。我有一些问题。我真正需要什么来创建我的项目?我需要单声道还是可以使用 .net 框架?为什么那
我正在尝试学习 Windows XP 上的 Python 诅咒。我可以让 window.getkey 命令正常工作,但命令 window.getstr 不仅失败而且程序退出。以下是示例代码行: x =
#include #include #include #include #include "color.h" #include using namespace std; using name
我正在编写一个关于 pythoncurses 的程序,我想知道是否有一种方法可以阻止终端大小调整,以防止curses 在 Linux 和 Windows 上崩溃。这就是发生的事情..我可以阻止这种情况
我正在编写一个 python curses 游戏 ( https://github.com/pankshok/xoinvader )。我发现了一个问题:在终端模拟器中它工作正常,但在 tty 屏幕闪烁
当我将某些表情符号(特别是标志)输出到 Curses 的子窗口中时,它会使输出变形,即使是在该子窗口之外的输出也是如此。 运行: import curses def draw_screen(stdsc
快速退出带有使用curses模块的无限循环的Python程序的最佳方法是什么? 我尝试在循环末尾添加 nodelay() 方法: if screen.getch() == ord('q'):
我在 ncurses 中有一个菜单系统。选择其中一个选项会将您带到另一个菜单。但我该如何返回? import curses def Main(): x = 0 while x!= ord(
这段代码运行了 100 万次迭代(在我的机器上大约几秒钟),但是当我按住一个按钮时,我按住的 # 迭代并没有显着增加。 import curses stdscr = curses.initscr()
我在 Python 中编写了一个比一次性使用多一点的监控脚本,它使用 ncurses 和颜色来显示一些经常更新但几乎没有人感兴趣的值。为了提醒我注意重大变化,我进行了一些设置,以便当这些值进入有趣的领
我正在使用 ncurses 并使用 getstr() 获取输入字符串。我想通过 Tab 击键进行类似自动完成的操作。但是,我看不到使用 getstr() 捕获 Tab 的方法。我试过这个: char
Windows 是否有等同于 PHP 的 ncurses? 我已经创建了一个 CLI 脚本,并希望以一种很好的方式显示各种统计信息(当前处理的记录、完成百分比等),而不是将负载和文本堆输出到 cmd.
我很难尝试获得带有 ruby 和诅咒的纯白色(背景)和黑色(前景)文本。 用这段代码 Curses.init_pair(1,COLOR_BLACK,COLOR_WHITE) Curses.attron
我正在尝试 Curses.getchr,但是没有捕获像 Ctrl+s 这样的键,是否有任何库可以让我捕获它们,最重要的是直观/可读性好 FooBar.bind('Ctrl+s'){ raise "do
我是一名优秀的程序员,十分优秀!