問題描述
我有一個屏幕我想問一個問題,所以在 kv 語言中,我有
I have a Screen where I want to ask a question, so in the kv language, I have
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
When I want to ask the question, I select the screen and set the focus to the 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'
在這段代碼的某個地方,我想
Somewhere in this code, I would like to
- 選擇 TextInput 將要彈出的 VKeyboard 布局(在我的代碼的其他部分會有所不同)
- 調整 VKeyboard 的高度.
我不明白文本輸入中的 VKeyboard 來自哪里;有什么方法可以從 TextInput 中獲取對它的引用嗎?
I don't understand where the VKeyboard comes from in Text Input; is there some way I can get a reference to it from the TextInput?
這是對 https://stackoverflow 的重述.com/questions/36414654/how-can-i-change-the-size-of-kivys-vkeyboard 那里有提示,但還不足以讓我繼續前進!
This is a restatement of https://stackoverflow.com/questions/36414654/how-can-i-change-the-size-of-kivys-vkeyboard There is a hint there, but not enough to get me going!
***********************************************
********************* **************************
為了理解 Tshirtman 的回答,我把它放在我的主要小部件的頂部:
Trying to understand the answer from Tshirtman, I put this at the top of my main widget:
Window.set_vkeyboard_class(get_vkeyboard())
然后添加
def get_vkeyboard():
print '>>>>>>>>>>>>>>>>>>>>>>>>>>in get_vkeyboard'
return VKeyboard
我發現 get_vkeyboard() 被立即調用,早在我需要鍵盤之前.所以似乎我無法在 get_vkeyboard() 中動態控制 VKeyboard 的外觀.如果我感到困惑(我無疑是!),請糾正我.
I found that get_vkeyboard() was called immediately, long before I needed a keyboard. So it seems that I'm not going to be able to control anything about the appearance of the VKeyboard dynamically in get_vkeyboard(). Please correct me if I'm confused (which I undoubtedly am!).
還有其他方法可以動態修改 VKeyboard 的外觀嗎?
Is there some other way to modify the appearance of the VKeyboard dynamically?
附:Focus Behavior 中似乎有提示:
P.S. There seems to be a hint in Focus Behavior:
input_type 是一個 OptionsProperty,默認為text".可以是其中之一文本"、號碼"、網址"、郵件"、日期時間"、電話"或地址".
input_type is an OptionsProperty and defaults to ‘text’. Can be one of ‘text’, ‘number’, ‘url’, ‘mail’, ‘datetime’, ‘tel’ or ‘address’.
我在 .kv 中的 TextInput 中添加了input_type: 'number'",但沒有任何影響.
I added "input_type: 'number'" to a TextInput in .kv, but it didn't have any affect.
推薦答案
你可以使用 Window.set_vkeyboard_class
設置鍵盤類,但是沒有什么能阻止你注冊任何返回鍵盤實例的函數,所以您可以使用上下文(您的應用程序的狀態)來動態決定將使用哪個類.由于在這種情況下您要自己返回一個實例,因此您可以決定它的大小、位置和其他詳細信息.我在一些應用程序中使用了這種技術,以便在實例上使用 Animation 以將其平滑地放置在屏幕的特定位置.
You can set keyboard class using Window.set_vkeyboard_class
, but nothing prevents you from registering any function that returns a keyboard instance there, so you could use the context (your app's state) to decide which class will be used, dynamically. Since you are returning an instance yourself in this case, you can decide of its size, pos, and other details. I used this technique in a few app to use Animation on the instance to place it in a particular spot of the screen smoothly.
偽例子:
from kivy.core.window import Window
from kivy.uix.vkeyboard import VKeyboard
from kivy.animation import Animation
from kivy.uix.screenmanager import ScreenManager, Screen
class KeyboardA(VKeyboard):
def place(self):
self.center_x = Window.center_x
self.top = 0
Animation(y=100, t='out_elastic', d=.4).start(self)
class KeyboardB(VKeyboard):
def place(self):
self.opacity = 0
Animation(opacity=1).start(self)
class MyApp(App):
def build(self):
sm = ScreenManger()
sm.add_widget(Screen(name='a'))
sm.add_widget(Screen(name='b'))
return sm
def get_keyboard(self, **kwargs):
if self.root.current == 'a':
kb = KeyboardA(**kwargs)
else:
kb = KeyboardB(**kwargs)
kb.place()
return kb
Window.set_vkeyboard_class(app.get_keyboard)
未經測試,但你應該明白.
untested, but you should get the idea.
這篇關于在 kivy 中,如何控制 TextInput 使用的 VKeyboard 的高度的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!