小编And*_*rew的帖子

如何在输入密码字段时检测

我目前正在尝试使用程序'matchbox-keyboard'(http://matchbox-project.org/)调试我遇到的问题,我希望能提供一些帮助.matchbox-keyboard是一个屏幕键盘,我目前在触摸屏信息亭使用,允许用户输入一些基本输入进行搜索等.它可能有点旧,但它仍然是我的应用程序的理想选择,因为它是一个"按需"键盘(即它只在需要时出现),轻量级,并且与我在设备上使用的matchbox-window-manager配合得很好.但是,自助服务终端必须访问的其中一个站点需要用户临时登录,并且由于某种原因,只要用户单击密码字段,屏幕键盘就会消失.

用户必须访问的站点无法更改,因此我决定尝试修改matchbox-keyboard以更改此行为.为此,我将问题追溯到代码中定义的自定义Atom,如下所示

typedef enum {
  MBKeyboardRemoteNone = 0,
  MBKeyboardRemoteShow,
  MBKeyboardRemoteHide,
  MBKeyboardRemoteToggle,
} MBKeyboardRemoteOperation;
Run Code Online (Sandbox Code Playgroud)

=============

void
mb_kbd_remote_init (MBKeyboardUI *ui)
{
  Atom_MB_IM_INVOKER_COMMAND = XInternAtom(mb_kbd_ui_x_display(ui), 
                       "_MB_IM_INVOKER_COMMAND", False);
}
Run Code Online (Sandbox Code Playgroud)

然后在Xevents中检查此Atom,然后使用xevent(xevent->xclient.data.l[0])中的数据来确定将键盘放入的状态.我无法弄清楚的是X显示器何时知道Xevent的假设是'_MB_IM_INVOKER_COMMAND'类型,以及它如何实际设置数据值.具体来说,当我输入密码字段时,如何/为什么将值设置xevent->xclient.data.l[0]为2(MBKeyboardRemoteHide).

我已经尝试搜索代码以获取对这里提到的关键对象的引用,以及从这里的指南中读取Xlib事件:http://tronche.com/gui/x/xlib/events/,并在上面搜索答案谷歌,但说实话,这只是我的头脑,我无法控制这个问题.在这一点上,它已经从我的自助服务终端项目的必要性中消失了,并且对我来说变得更加好奇(这些东西会让我疯狂,直到我弄清楚),所以如果有人能帮助我得到一些答案,我会最欣赏的.

==========更新==========

进一步的测试/信息:

这个问题似乎不是特定于浏览器的实现,因为我在gecko浏览器(Firefox)上尝试了我想要的网站,以及只有文本和密码字段的基本测试HTML页面,以及webkit浏览器( Midori),并且在两个浏览器中,两个页面上的行为都是相同的.这是测试HTML页面供参考:

<head>
</head>
<body>
    <form>
    Name: <input type="text" name="firstname"><br>
    PW: <input type="password" name="lastname">
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

在我看来,密码字段由于某种原因故意拒绝焦点,因此直接单击该字段会导致调用gtk-im方法焦点.我怀疑它可能是GTK实现的一部分,可能与密码字段通常是"隐藏"的行为有关.也许这样做是为了防止按需剪贴板存储密码或其他东西?

通过单击密码字段和文本字段检查事件列表/调试输出时,每种字段类型的已接收事件列表非常相似.许多事件都是相同的类型,但它们之间存在一些差异,我仍在尝试解码.我知道事件编号在这种情况下几乎没有意义,但为了说明,这里是非密码字段的不同事件列表:

matchbox-keyboard-remote.c:47,mb_kbd_remote_process_xevents() got a message of type _MB_IM_INVOKER_COMMAND, val 1
matchbox-keyboard-ui.c:560,mb_kbd_ui_redraw() mark
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 69206018
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type …
Run Code Online (Sandbox Code Playgroud)

c unix xlib

5
推荐指数
1
解决办法
385
查看次数

Python 3.3.2 tkinter ttk TreeView每列排序仅按最后一列排序?

我试图得到一个简单的ttk TreeView表,使用标题'command'标签进行每列排序,但它似乎不正常.我正在使用这个问题的答案来实现功能:Tk treeview列排序

我的代码:

import tkinter as tk
from tkinter import ttk

def treeview_sort_column(tv, col, reverse):
    print('sorting %s!' % col)
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    l.sort(reverse=reverse)

    # rearrange items in sorted positions
    for index, (val, k) in enumerate(l):
        print('Moving Index:%r, Value:%r, k:%r' % (index, val, k))
        tv.move(k, '', index)

    # reverse sort next time
    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))

cols = ('name', 'path', 'time', 'pb')

root = tk.Tk()
root.geometry("700x500")
listbox = ttk.Treeview(root, columns=cols, show="headings") …
Run Code Online (Sandbox Code Playgroud)

python sorting treeview tkinter ttk

2
推荐指数
1
解决办法
2551
查看次数

标签 统计

c ×1

python ×1

sorting ×1

tkinter ×1

treeview ×1

ttk ×1

unix ×1

xlib ×1