我有一个屏幕,在这个屏幕上我想问一个问题,因此在kv语言中我写了如下代码:
Screen:
name: 'keyb'
BoxLayout:
orientation: 'vertical'
Label:
id: rnl
size_hint_y: .1
text: ''
TextInput:
id: tinput
hint_text: '.mid'
size_hint: (.8, .1)
pos_hint: {'x': .1}
multiline: False
on_focus: root.focusCallback(args[1])
Widget:
size_hint_y: .7
当我想要提问时,我会选择屏幕并将焦点设置为TextInput
self.tinput.text = ""
self.screens.current = 'keyb'
Clock.schedule_once(self.focusKbd, .1)
然后这个代码就会级联下去:
def focusKbd(self, x):
self.tinput.focus = True
def focusCallback(self, f):
if not f:
# Deal with input now
self.screens.current = 'seq'
在这段代码中,我想要:
- 选择TextInput将弹出哪个VKeyboard布局(在我的代码的其他部分中可能会不同)
- 调整VKeyboard的高度。
我不明白VKeyboard是从TextInput中来的;有没有一种方法可以从TextInput中获取对它的引用?
这是对https://stackoverflow.com/questions/36414654/how-can-i-change-the-size-of-kivys-vkeyboard的重新陈述。那里有一些提示,但不足以让我开始!
*********************编辑:**************************
尝试理解Tshirtman的答案,我将以下内容放在我的主要小部件顶部:
Window.set_vkeyboard_class(get_vkeyboard())
并且随后添加。
def get_vkeyboard():
print '>>>>>>>>>>>>>>>>>>>>>>>>>>in get_vkeyboard'
return VKeyboard
我发现get_vkeyboard()被立即调用,远在我需要键盘之前。因此,在get_vkeyboard()中无法控制VKeyboard的外观。如果我混淆了什么,请纠正我(我肯定是混淆了!)。
有没有其他方法可以动态修改VKeyboard的外观?
附言:焦点行为中似乎有一些提示:
input_type是OptionsProperty,默认为“text”。可以是以下之一:“text”,“number”,“url”,“mail”,“datetime”,“tel”或“address”。
我在.kv文件中的TextInput中添加了“input_type:'number'”,但没有任何影响。