- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当用户按下 H 键时,我试图在我的 urwid 应用程序顶部显示一个帮助对话框,但我似乎无法让它消失。它显示没有问题。我错过了什么?我一整天都在做这件事。
我看过几个描述不同实现方法的例子。我玩过信号,但无济于事。我不想使用可见的帮助按钮,而是完全依赖键盘快捷键。
import urwid
class Application(object):
'''
The console UI
'''
# The default color palette
_palette = [
('banner', 'black', 'light gray'),
('selectable', 'white', 'black'),
('focus', 'black', 'light gray')
]
def __init__(self):
self._content = [
urwid.Text('Initializing...', align = 'left')
]
# Body
self._body_walker = urwid.SimpleListWalker(self._content)
self._body_list = urwid.ListBox(self._body_walker)
self._body_padding = urwid.Padding(
self._body_list,
left = 1,
right = 1
)
self._body = urwid.LineBox(self._body_padding)
# Loop
self._loop = urwid.MainLoop(
self._body,
self._palette,
unhandled_input = self._handle_input
)
def reset_layout(self):
'''
Resets the console UI to the default layout
'''
self._loop.widget = self._body
self._loop.draw_screen()
def _handle_input(self, key):
'''
Handles user input to the console UI
Args:
key (object): A mouse or keyboard input sequence
'''
if type(key) == str:
if key in ('q', 'Q'):
raise urwid.ExitMainLoop()
elif key in ('h', 'H'):
self.dialog(
[
'Urwid v1.3.1\n',
'\n',
'Press Q to quit\n',
'Press H for help'
]
)
elif type(key) == tuple:
pass
def print(self, string = '', align = 'left'):
'''
Prints a string to the console UI
Args:
string (str): The string to print
align (str): The alignment of the printed text
'''
self._body_walker.append(
urwid.Text(string, align = align)
)
def printf(self, *strings):
'''
Prints multiple strings with different alignment
Args:
strings (tuple): A string, alignment pair
'''
self._body_walker.append(
urwid.Columns(
[
urwid.Text(string, align = align)
for string, align in strings
]
)
)
def start(self):
'''
Starts the console UI
'''
self._loop.run()
def dialog(self, text = ['']):
'''
Overlays a dialog box on top of the console UI
Args:
test (list): A list of strings to display
'''
# Header
header_text = urwid.Text(('banner', 'Help'), align = 'center')
header = urwid.AttrMap(header_text, 'banner')
# Body
body_text = urwid.Text(text, align = 'center')
body_filler = urwid.Filler(body_text, valign = 'top')
body_padding = urwid.Padding(
body_filler,
left = 1,
right = 1
)
body = urwid.LineBox(body_padding)
# Footer
footer = urwid.Button('Okay', self.reset_layout())
footer = urwid.AttrWrap(footer, 'selectable', 'focus')
footer = urwid.GridFlow([footer], 8, 1, 1, 'center')
# Layout
layout = urwid.Frame(
body,
header = header,
footer = footer,
focus_part = 'footer'
)
w = urwid.Overlay(
urwid.LineBox(layout),
self._body,
align = 'center',
width = 40,
valign = 'middle',
height = 10
)
self._loop.widget = w
Application().start()
最佳答案
你能想象在意识到我需要做的就是在按钮的回调中去掉括号后我现在有多愚蠢吗?
footer = urwid.Button('Okay', self.reset_layout)
这里有一些示例代码,供将来偶然发现此问题的人使用。
import urwid
class Application(object):
'''
The console UI
'''
# The default color palette
_palette = [
('banner', 'black', 'light gray'),
('selectable', 'white', 'black'),
('focus', 'black', 'light gray')
]
def __init__(self):
self._body = urwid.SolidFill('.')
self._pile = urwid.Pile(
[
self.dialog()
]
)
self._over = urwid.Overlay(
self._pile,
self._body,
align = 'center',
valign = 'middle',
width = 20,
height = 10
)
# Loop
self._loop = urwid.MainLoop(
self._over,
self._palette,
unhandled_input = self._handle_input
)
def _handle_input(self, key):
'''
Handles user input to the console UI
Args:
key (object): A mouse or keyboard input sequence
'''
if type(key) == str:
if key in ('q', 'Q'):
raise urwid.ExitMainLoop()
elif type(key) == tuple:
pass
def start(self):
'''
Starts the console UI
'''
self._loop.run()
def do(self, thing):
self._loop.widget = self._body
#self._pile.contents.clear()
def dialog(self):
'''
Overlays a dialog box on top of the console UI
'''
# Header
header_text = urwid.Text(('banner', 'Help'), align = 'center')
header = urwid.AttrMap(header_text, 'banner')
# Body
body_text = urwid.Text('Hello world', align = 'center')
body_filler = urwid.Filler(body_text, valign = 'top')
body_padding = urwid.Padding(
body_filler,
left = 1,
right = 1
)
body = urwid.LineBox(body_padding)
# Footer
footer = urwid.Button('Okay', self.do)
footer = urwid.AttrWrap(footer, 'selectable', 'focus')
footer = urwid.GridFlow([footer], 8, 1, 1, 'center')
# Layout
layout = urwid.Frame(
body,
header = header,
footer = footer,
focus_part = 'footer'
)
return layout
Application().start()
关于python - Urwid 键盘触发弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47622576/
我遇到了一个问题。我正在使用 pyinstaller 将代码导出到 .exe。代码包括 tkinter、PIL 和 keyboard 模块。软件在我使用 Python 的 PC 上运行完美,而在没有
我正在尝试将 STM32F0-disco 用作 Windows PC 的键盘。正在打印的字符有问题。 下面的代码等到板载按钮被按下,然后应该打印一次这三个字符。 /* USER CODE BE
我想在单击键盘上的“完成”按钮时退出键盘。我怎样才能做到这一点?我有以下代码=> textView.returnKeyType = UIReturnKeyDone; 我有这个代码用于限制 TextVi
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我想调出一个用于输入电话号码的键盘。有没有办法在我自己的 Activity 中显示此对话框并捕获用户输入的内容。我需要能够控制用户点击调用时发生的情况。所以我很感兴趣自定义允许用户输入电话号码的 Ac
我希望软键盘位于我的布局之上,而不是在它弹出时四处移动我的布局。我该怎么做呢?我查看了 list ,但从未设置 android:windowSoftInputMode="adjustResize" 此
主题:将某些键替换为另一个键值。 例如如果我按 P,它应该是 F24。 当我尝试从 .ini 文件加载键值时, Hook 不再是全局的。它仅在 winapi 窗体处于焦点时才有效。 我的 DLL 代码
当我点击 EditText 时,是否可以用小写字母启动 android 键盘?基本上,我想要的是将 EditText 中的第一个字母小写,但也让用户可以根据需要将其变为大写...... (EditTe
我想监控 IOS 上的键盘隐藏按钮并触发一个事件。我在说: 我只想在用户按下实际按钮时进行监控。我不想要键盘隐藏时的事件。 最佳答案 用户键盘通知观察者.. 对于 swift NSNotificati
在经历了这一切之后就像认真的...... Easy way to dismiss keyboard? ...我有多个 TextFields 和一些 TextViews。有没有办法对所有文本字段进行批处
所以我想在我的应用程序中添加一个键盘,其中包含表情符号,就像 Whatsapp 或环聊一样。我怎样才能做到这一点?我想保留我的键盘,因为我只想添加标签来放置表情符号。我认为软键盘很容易支持它,但到目前
首先,我会让您知道,我在 StackOverflow 以及 Google 和 Github 上查看了很多很多不同的帖子。我已经到处寻找对我有帮助的任何。但是,似乎没有任何效果。它要么已经过时(超过 1
当按下相应的键时,我试图让我的游戏中的宇宙飞船 (PlayerShip.gif) 向左、向右、向上和向下移动。我知道我需要一个 keyboardListener 但我在弄清楚它的去向以及它是如何实际实
我正在尝试制作一个 HID USB 设备。我搜索了一下,发现键盘的输出有 8 个字节。第一个字节是修饰符,第二个字节是保留字节,其余 6 个字节是关键代码。我认为在某些情况下,例如“prtsc”,需要
我最近开始学习 Vim,在深入学习之前,我有一个问题需要回答。 使用 AZERTY 键盘,我是否应该重新映射命令和快捷方式的键以适应 QWERTY 键盘的键位置? 我之所以问这个,是因为显然在创建这些
我一直认为在使用 Dvorak 布局之前,我需要购买 Dvorak 键盘。但是我在亚马逊上找不到。仅仅是从 Qwerty 键盘上弹出键并移动它们吗? 最佳答案 为了帮助您了解键盘布局,您可以重新排列
我不敢相信我还没有找到任何关于此的文档,但我想知道如何命令键盘激活并接收来自它的输入。我可以找到在编辑文本字段时操作弹出键盘的所有示例。谢谢 最佳答案 您还可以使用 UIKeyInput 协议(pro
我有一个 UITextField,其中弹出的键盘已禁用其 Shift 键。键盘类型设置为 UIKeyboardTypeNamePhonePad,看起来应该允许大写。 如果我将键盘类型更改为“默认”但保
背景:我的表单有一个 TWebBrowser。我想用 ESC 关闭表单,但 TWebBrowser 吃掉了击键 - 所以我决定使用键盘 Hook 。 问题是表单可以同时在多个实例中打开。 无论我做什么
我需要(即客户要求)提供自定义键盘,供用户在文本字段和区域中输入文本。我已经有一些可以执行键盘操作并将测试附加到文本字段的东西,但是我想让它更通用并让它像标准的 iphone 键盘一样工作,即当用户选
我是一名优秀的程序员,十分优秀!