问题标签 [urwid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
356 浏览

python - 在 Urwid 中将项目附加到 SimpleFocusListWalker

而不是像urwid 示例中那样执行此操作:

我想这样做:

但是,当我这样做时,我会得到一个很长的异常转储,结尾为:

AttributeError:“列表”对象没有属性“行”

将项目附加到 SimpleFocusListWalker 的正确方法是什么。

我正在尝试从上到下构建一个菜单,而不在构造函数中指定整个内容。

0 投票
1 回答
193 浏览

python - urwid 更改显示属性

我正在创建一个配置器,允许用户从一组合法值中进行选择。对于每个合法值,我创建一个选项(本质上是一个菜单按钮)。如果用户选择一个选项,则该选项会将值更改为其标题。

请注意,具有当前值的选项具有与其他选项不同的属性。我想在选择后循环选择并更改属性以匹配新值。

我可以通过将legal_choices列表传递给所有选项来循环选择(或者做一些更聪明的事情),但我不知道如何编写循环遍历小部件列表并更改其属性的代码。

有谁知道如何更改 urwid 中小部件的属性?

0 投票
1 回答
1276 浏览

python - Urwid 键盘触发弹出窗口

当用户按下 H 键时,我试图在我的 urwid 应用程序顶部显示一个帮助对话框,但我似乎无法让它消失。它显示没有问题。我错过了什么?我一整天都在做这件事。

我已经查看了几个示例,这些示例描述了实现这一点的不同方法。我玩过信号,但无济于事。我想避免有一个可见的帮助按钮,而只依赖键盘快捷键。

0 投票
1 回答
777 浏览

python - 如何将 urwid.BigText 放入 urwid.ListBox

AttributeError: 'BigText' object has no attribute 'rows'尝试在 ListBox 顶部放置 BigText 时,我不断收到错误消息。我知道 BigText 是一个“固定”小部件,而 ListBox 需要一个“流”小部件,但无论我尝试什么,我似乎都无法让我的程序采用 BigText。这是我尝试过的详尽示例:

谢谢!

0 投票
1 回答
174 浏览

python-3.x - Urwid 过滤按键/过滤掉鼠标点击

我正在使用 Urwid 组合一个小控制台应用程序。我使用了 Urwid 教程(参见http://urwid.org/tutorial/)中描述的模式来处理按键事件。

例如

我的问题是 unhandled_input 似乎捕获了鼠标点击,这导致我的处理程序出错

过滤按键并丢弃鼠标点击的最佳方法是什么?

0 投票
1 回答
840 浏览

python - Python Urwid 中的按键功能

如果这不是一个好问题,请原谅我。我很难理解 Python URWID 库中的代码之一。这是教程中的示例代码之一。http://urwid.org/tutorial/index.html

我的问题是

1) Keypress 功能以击键作为输入。我无法理解在哪一行代码中,击键被分配给“键”变量。第7行直接使用,不做任何初始化

这怎么可能?

2) Keypress 函数尚未在 QuestionBox 类之外调用。即使没有调用该函数,为什么它会被执行?

3) 新类 QuestionBox 中没有定义init函数。为什么不需要它?我相信它应该 在类定义中同时具有initsuper 。

4) 'keypress' 功能中的 'size' 字段是什么?

提前致谢

0 投票
1 回答
465 浏览

python - 如何使用 urwid 确定列表框中可见项目的数量?

我想实现一些提示,urwid.ListBox当我向上或向下滚动时,在可见项目列表的下方或上方是否仍有项目。'向下滚动' 提示应该只在最后一个可见项目之后有剩余项目时出现,并且当最后一个可见项目是列表中的最后一个项目时它应该消失。反向适用于“向上滚动”提示。

然后我需要知道列表中有多少可见项目。有没有办法检索列表框中可见项目的数量,我想它等于列表框的高度,对吧?

这是我要检查的起点:

这个想法是要知道当终端窗口缩小或不够高以显示所有内容时,列表框是否在框架内完全可见,即frame.height >= listbox.height.

0 投票
1 回答
765 浏览

navigation - 我如何知道哪个小部件具有 urwid 的焦点?

我正在设计一个 Python 界面,并且我有几个使用光标导航键(即、和)urwid无法访问的元素,这确实是我想要的。我想要的是使用键实现循环导航。updownleftrightTab

我想使用这种技术来实现三个组件——即一个由单选按钮组成的列表框、一个编辑框和一个位于编辑框右侧的按钮。我的应用程序是围绕派生 urwid.WidgetWrap 的类构建的。它包含一个框架,其主体是列表框,页脚包含编辑框。

到目前为止,我已经发现我可以Tab从主循环的unhandled_input回调中捕获密钥......但我不知道这是否是要走的路。此外,我还没有弄清楚如何检测这三个小部件中的哪一个具有焦点。

谁能指出我正确的方向?

0 投票
1 回答
1376 浏览

linux - 如何使用 urwid 和 asyncio 使长任务不阻塞?

我正在编写一个 Python curses 应用程序,它通过分别通过进程'stdin和发送和接收字符串来控制外部(Linux,如果有帮助的话)进程stdout。该接口使用urwid. 我已经编写了一个类来控制外部进程和其他几个用于一些 urwid 组件的类。

我还有一个按钮,应该向外部进程发送命令。但是该过程不会立即响应,其任务通常需要几秒钟,在此期间我希望界面不要冻结。

这是我运行子进程的方式:

我必须使进程的输出流非阻塞才能解析其输出。我不知道这对我的问题是否重要。

以下是我用来控制子进程输入和输出流的方法:

我谈到的按钮只是从主脚本入口函数中设置了它的回调。该回调应该向子进程发送命令并循环通过结果输出行,直到找到给定的文本,在这种情况下回调函数退出。在此之前,该过程会输出一些我需要捕获并在用户界面中显示的有趣信息。

例如:

需要注意的是:

  • 即使进程输出流是静默的,直到从(可选)解析的行中读取哨兵值,该read()函数也会旋转(我找不到其他方式),
  • urwid 界面不会刷新,直到按钮回调函数退出,这会阻止urwid' 的主循环刷新屏幕。

我可以使用线程,但从我读过的urwid支持asyncio来看,这就是我想要实现的。urwid你可以称我为笨蛋,因为即使在浏览asyncio 示例和阅读 Pythonasyncio文档之后,我也无法清楚地弄清楚如何。

考虑到这些方法中的任何一种都有更改的空间,我仍然希望保持过程控制类——即包含read()和的类send()——尽可能通用。

到目前为止,我没有尝试过导致界面在进程繁忙时被更新。接收进程“通知”的组件是一个普通的urwid.Text()小部件。

0 投票
1 回答
58 浏览

function - pass additional arguments with callback function

The following example (taken from here: http://urwid.org/tutorial/index.html) shows how to pass key values to a callback function show_or_exit.

How can I pass another argument to show_or_exit with this callback that depend on the state of the system, that would be something like this?