- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 urwid,这是一个用于在 ncurses 中设计终端用户界面的 Python“框架”。不过有一件事我不能在 urwid 中做,而这在 curses 中很容易——使光标不可见。就像现在一样,选择按钮时光标是可见的,而且看起来很丑陋。有没有办法禁用它?
最佳答案
我同意 urwid.Button
上闪烁的光标看起来有点蹩脚,所以我想出了一个隐藏它的解决方案。在 urwid 中,Button
类只是 WidgetWrap
的子类,包含一个 SelectableIcon
和两个文本小部件(封闭的“<”和“>” ).默认情况下,SelectableIcon
类将光标位置设置为标签的第一个字符。通过子类化 SelectableIcon
,修改光标位置,然后将其包装到 urwid.WidgetWrap
子类中,您可以创建自己的自定义按钮,该按钮可以执行内置 Button
,甚至更多。
这是它在我的项目中的样子。
import urwid
class ButtonLabel(urwid.SelectableIcon):
def __init__(self, text):
"""
Here's the trick:
we move the cursor out to the right of the label/text, so it doesn't show
"""
curs_pos = len(text) + 1
urwid.SelectableIcon.__init__(self, text, cursor_position=curs_pos)
接下来,您可以将 ButtonLabel
对象与任何其他对象一起包装到 WidgetWrap
子类中,该子类将成为您的自定义按钮类。
class FixedButton(urwid.WidgetWrap):
_selectable = True
signals = ["click"]
def __init__(self, label):
self.label = ButtonLabel(label)
# you could combine the ButtonLabel object with other widgets here
display_widget = self.label
urwid.WidgetWrap.__init__(self, urwid.AttrMap(display_widget, None, focus_map="button_reversed"))
def keypress(self, size, key):
"""
catch all the keys you want to handle here
and emit the click signal along with any data
"""
pass
def set_label(self, new_label):
# we can set the label at run time, if necessary
self.label.set_text(str(new_label))
def mouse_event(self, size, event, button, col, row, focus):
"""
handle any mouse events here
and emit the click signal along with any data
"""
pass
在这段代码中,FixedButton
WidgetWrap
子类中的小部件组合实际上并不多,但是您可以添加一个“[
”和“]
”到按钮的边缘,将其包装到 LineBox
等中。如果所有这些都是多余的,您可以将事件处理函数移动到 ButtonLabel
类,并让它在被点击时发出信号。
要使按钮在用户移动时反转,将其包装到 AttrMap
并将 focus_map
设置为某个调色板条目(“button_reversed
”,以我为例)。
关于python - urwid:使光标不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34633447/
尝试在 ListBox 顶部添加 BigText 时,我不断收到错误 AttributeError: 'BigText' object has no attribute 'rows'。我知道 BigT
在 urwid 中,如何动态更改调色板的颜色?例如,假设我想在按下“C”按钮时进行更改: import urwid def changeColor(key): if key in ('c',
我正在使用 urwid 设计一个 curses ui。我可以使用显示属性将文本显示为粗体、下划线或突出显示。是否可以使用斜体? 最佳答案 简答 理论上,是的。 在实践中:还没有。 长答案 基本上,cu
当用户按下 H 键时,我试图在我的 urwid 应用程序顶部显示一个帮助对话框,但我似乎无法让它消失。它显示没有问题。我错过了什么?我一整天都在做这件事。 我看过几个描述不同实现方法的例子。我玩过信号
我正在尝试使一个简单的 urwid 成为无限循环的输出屏幕。它需要输出来自另一个类的数据。 我现在找到的解决方案是:拥有一个带有 queue 属性的 Printer 类(实际输出类的测试替换器)。当它
我正在 urwid 中创建一个列表框,其中每个项目都是从 URL 列表中提取的 URL。当选择一个项目并单击 ENTER 时,我想提取 URL 并在浏览器中打开它。到目前为止,这是我的代码: clas
是否可以跟踪 urwid.ListBox 对象中高亮项的变化?或者甚至通过 ListWalker 对象? 我想在用户使用箭头键 [🠉]、[🠋] 从一个项目移动到另一个项目时调用回调,不是 当用户在
我正在使用 urwid,这是一个用于在 ncurses 中设计终端用户界面的 Python“框架”。不过有一件事我不能在 urwid 中做,而这在 curses 中很容易——使光标不可见。就像现在一样
我正在使用 urwid 库,到目前为止它非常棒。但我无法让进度条工作。我写了一个简单的测试程序,如下所示: import os import urwid # a function that t
我正在构建一个基于 Horizontal Menu 的应用程序来自 Urwid 的示例。我有一个项目,我想显示一些信息。我在下方有一个“确定”按钮,我希望它可以将菜单弹出回到之前的状态,或者重新启动整
有没有办法向用户显示 urwid 列表框在显示部分的上方/下方有其他项目? 我正在考虑类似滚动条的东西,它可以显示条目的数量。 或列表框顶部/底部的单独栏。 如果这个行为不能实现,有什么方法可以实现这
我正在用 Python 开发一个聊天程序,想为我的客户端添加一些用户友好的界面。事实是我给了自己挑战仅使用终端。 所以我找到了可以使用的 urwid 模块,它是跨平台的并且在网上有详细的文档。 看完模
我正在使用 Urwid 按钮,想知道是否有办法直接在按钮上处理按键事件? urwid.Button((item["customer"] + "/ " + item["case"]), button_p
我想实现一些提示,以确定当我向上或向下滚动时 urwid.ListBox 中的可见项目列表下方或上方是否仍有项目。仅当最后一个可见项目之后还有剩余项目时,“向下滚动”提示才应出现;当最后一个可见项目是
如果我进行以下调用: from urwid import raw_display cols, rows = raw_display.Screen().get_cols_rows() ... 文件描述符
我正在尝试编写一个具有不同 View 的程序。 我试图创建一个类来处理带有 urwid 的不同 View ,同时将 View 代码与其余部分分开。但经过多次不同的尝试,我不知道从哪里开始了。 我需要哪
与 urwid 混淆了。通过调整其中一个 urwid 示例,我得到了初始屏幕,并希望在按下 F5 键时执行 run_stuff() 函数,并显示指示 run_stuff() 正在运行并最终完成的消息(
我目前的权宜之计是将日志记录到一个文本文件中,但这不是很互动。我试过使用 pdb ,但这似乎与 urwid 不一致,pdb 一旦遇到断点就不会接受任何输入。 最佳答案 几个实践......调试 urw
是否可以将 ListBoxes 放入 SimpleListWalkers 中?我正在尝试制作嵌套的列表框,但出现此错误: AttributeError: 'MyListBox' 对象没有属性 'row
作为 Python 和 urwid 的新手,我尝试了这里的教程示例 http://excess.org/urwid/docs/tutorial/ 然而,虽然第一个确实工作正常,但大多数后来的似乎都不起
我是一名优秀的程序员,十分优秀!