当前位置:  开发笔记 > 编程语言 > 正文

提交建议

如何解决《提交建议》经验,为你挑选了1个好方法。

我正在构建一个小的PyGTK应用程序,我有一个文本输入字段(当前是ComboBoxEntry),其中填充了一些用户应该可以选择的值.

我想我想要做的是过滤掉匹配的字段并仅显示那些字段,以便使用键盘箭头的用户可以选择其中一个匹配字段.

为了给出一些背景知识,预定义的值是一堆网址,用户应该可以从theese中选择或填写一个新的.

示例:预定义的URL:

http://www.google.com

http://www.google.com/android

http://www.greatstuff.com

http://www.facebook.com

当用户键入' http://www.g '时,将显示以该字符串开头的三个URL(以某种方式),当键入' http://www.goog ' 时,将显示两个以此开头的URL

有任何想法吗?



1> Beni Chernia..:

一个Entry带有EntryCompletion似乎比一个更合适的ComboBoxEntry.与往常一样,本教程是一个良好的开端.

当预定义的URL列表很小并且已修复时,可以非常轻松地进行设置.您只需要填充ListStore:

# simplified example from the tutorial
import gtk

urls = [
    'http://www.google.com',
    'http://www.google.com/android',
    'http://www.greatstuff.com',
    'http://www.facebook.com',
    ]
liststore = gtk.ListStore(str)
for s in urls:
    liststore.append([s])

completion = gtk.EntryCompletion()
completion.set_model(liststore)
completion.set_text_column(0)

entry = gtk.Entry()
entry.set_completion(completion)

# boilerplate
window = gtk.Window()
window.add(entry)

window.connect('destroy', lambda w: gtk.main_quit())
window.show_all()
gtk.main()

用户不太可能打扰输入"http://"甚至"www.",所以你可能想要匹配URL的任何部分(例如只是"og"有效!):

def match_anywhere(completion, entrystr, iter, data):
    modelstr = completion.get_model()[iter][0]
    return entrystr in modelstr
completion.set_match_func(match_anywhere, None)

这将测试ListStore中的每个值以进行匹配,因此它不能扩展到大型列表(我的意思是巨大的 ; 1000个工作正常).

一定要使用EntryCompletion的各种选项,以配置最愉快的行为.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有