如何使用Kivy创建登录屏幕

时间:2020-01-30 11:25:19

标签: python kivy kivy-language

Desired result

当前我的代码如下:

x = []
for j in range(jmx):
  x.append([])
  for i in range(imx):
    x[j].append(float(0))

我想要实现的是,当我按12345时,登录屏幕消失,并弹出一个新屏幕。我有以下想要实现的格式。

编辑:

2 个答案:

答案 0 :(得分:0)

不确定要达到所需结果的精确程度,但是只需将“ kv”更改为:

<KeypadTextInput@TextInput>:
    keypad: None
    on_focus: root.keypad._on_focus(*args)

BoxLayout:
    orientation: 'vertical'
    KeypadTextInput:
        keypad: keypad
    Keypad:
        id: keypad
        size_hint_x: 0.5
        pos_hint: {'center_x': 0.5}

答案 1 :(得分:0)

首先,关于焦点问题,我认为这取决于您如何加载屏幕。是您的根窗口小部件还是您加载的屏幕? 由于您看起来像是某种根小部件,因此您可能希望在启动应用程序时执行此操作。您可以为此使用“ on_start”事件

class MyApp(App):
    def on_start(self,*args):
        self.ids.mytextinput.focus = True   #replace mytextinput with whatever id name you give to your text input in the kv string

对于文本输入触发事件,当您键入一定数量的数字时,可以使用on_text。为此,我认为最好是实例化自己的课程。

class KeyPadTextInput(TextInput):
    def on_text(self,*args):
        if len(self.text)==3:
            #put your python code here
            #you can launch MyApp functions by using app.function_name()

我注意到的另一件事是您使用on_focus来触发具有相同* args的'_on_focus'事件。您可以通过从kv字符串中删除on_focus并调整类on_focus事件,调用super()。on_focus(* args)来实现相同的目的,因此继承的函数也将这样触发:

class KeyPadTextInput(TextInput):
    def on_focus(self,*args):
        #your code either before the super call
        super().on_focus(*args)
        #or your code after the super call

希望能帮助您指出正确的方向。

PS。 TextInputs有一些预先构建的输入过滤器,例如过滤器,因此您只能输入数字!如果用户键盘抬起或者他们也可以访问一个键盘,这将很方便。 在kv字符串中只需添加

input_filter: 'int'