python - 有没有办法让 TextInput 框自动搜索地址列表?
问题描述
我希望用户能够开始在TextInput
框中输入地址,并且当他们开始输入地址时,正在搜索列表并找到匹配选项。这是可以在kivy中完成的事情吗?
如果不够清楚,我可以找到一个示例,但在大多数网站上随处可见,您必须填写地址(例如送货地址)
解决方案
这是另一种使用方法的开始Spinner
:
from kivy.app import App
from kivy.properties import StringProperty, ListProperty
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.spinner import Spinner
class AddressChooser(FocusBehavior, Spinner):
addressfile = StringProperty()
addresslist = ListProperty([])
def __init__(self, **kwargs):
self.addressfile = kwargs.pop('addressfile', '')
self.sync_height = True
super(AddressChooser, self).__init__(**kwargs)
self.modifiers = []
self.bind(addressfile=self.load_addresses)
self.load_addresses()
def on_parent(self, widget, parent):
self.focus = True
def load_addresses(self):
if self.addressfile:
with open(self.addressfile) as fd:
for line in fd:
self.addresslist.append(line)
else:
self.addresslist = []
self.values = []
if len(self.text) > 0:
self.on_text(self, self.text)
def on_text(self, chooser, text):
values = []
for addr in self.addresslist:
if addr.startswith(text):
values.append(addr)
self.values = values
self.is_open = True
def keyboard_on_key_up(self, window, keycode):
if keycode[0] == 304:
self.modifiers.remove('shift')
super(AddressChooser, self).keyboard_on_key_up(window, keycode)
def keyboard_on_key_down(self, window, keycode, text, modifiers):
if keycode[0] == 304: # shift
self.modifiers.append('shift')
elif keycode[0] == 8 and len(self.text) > 0: # backspace
self.text = self.text[:-1]
else:
if 'shift' in self.modifiers:
self.text += text.upper()
else:
self.text += text
super(AddressChooser, self).keyboard_on_key_down(window, keycode, text, modifiers)
class TestApp(App):
def build(self):
layout = RelativeLayout()
chooser = AddressChooser(addressfile='adresses.txt', size_hint=(0.5,None), height=50, pos_hint={'center_x':0.5, 'center_y':0.5})
layout.add_widget(chooser)
return layout
if __name__ == '__main__':
TestApp().run()
推荐阅读
- pandas - 将列值重塑为最后带有标识符列的行
- function - 函数重载两个函数只有一个默认参数不同
- haskell - 关于 LYAH 中教授的 Writer monad 的问题。(附加到日志是如何发生的?)
- javascript - Puppeteer:搜索内部文本不区分大小写
- javascript - 如何在 keycloak 的 ftl 文件中包含 React js 文件?
- c++ - 如何使用 wxwidget 在 libvlc 上绘制徽标或任何图形?
- python - 获取具有特定文本或条件的行(以及之前和之后的一些行)
- mongodb - 如何修复MongoDB中的组和总和?
- angular - Angular 获取 JSON 作为地图
- javascript - 如何解决未定义业力角4的本机元素