如何在kivymd focus agane中制作输入字段

Posted

技术标签:

【中文标题】如何在kivymd focus agane中制作输入字段【英文标题】:How to Make Input Field in kivymd focus agane 【发布时间】:2022-01-22 13:07:01 【问题描述】:

使用 kivymd 使应用程序尽可能快地扫描条码,我创建了这个应用程序,其中包含一个文本字段,它将获取 QR 码并存储它,如果用户输入一次,焦点将消失,必须手动聚焦它以获取另一个输入用户 .有没有可能让它在不失去注意力的情况下接受很多输入?

main.py

from kivymd.app import MDApp
from kivymd.uix.screen import Screen



class Layout(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
    
    def check(self):
        item = self.ids.qrcode
        print(item.text)
       
        


class Core(MDApp):
    def build(self):
        self.theme_cls.primary_palette = "Green"
        return Layout()

if __name__ == '__main__':
    Core().run()

core.kv

<Layout>:
    cols:1
    MDTextField:
        id: qrcode
        hint_text: "QR Code"
        focus: True
        helper_text: "Enter Shipment QR"
        helper_text_mode: "on_focus"
        icon_right: "qrcode-scan"
        icon_right_color: app.theme_cls.primary_color
        pos_hint:'center_x': 0.5, 'center_y': 0.9
        size_hint_x:None
        width:300
        on_text_validate: root.check()

【问题讨论】:

【参考方案1】:

如果你把self.ids.qrcode.focus = True 放在你的check 方法中,它会被过早调用。你会集中注意力,然后会失去焦点。

您可以在check 方法中使用Clock.schedule_once(self.refocus_ti),方法如下:

def refocus_ti(self, *args):
    self.ids.qrcode.focus = True

使用上面的代码,它将在您的 check 方法之后重新聚焦文本字段。

完整代码sn-p:

# core.kv
<Layout>:
    cols:1
    qrTextInput: qrcode
    MDTextField:
        id: qrcode
        hint_text: "QR Code"
        focus: True
        helper_text: "Enter Shipment QR"
        helper_text_mode: "on_focus"
        icon_right: "qrcode-scan"
        icon_right_color: app.theme_cls.primary_color
        pos_hint:'center_x': 0.5, 'center_y': 0.9
        size_hint_x:None
        width:300
        on_text_validate: root.check()
from kivymd.app import MDApp
from kivymd.uix.screen import Screen
from kivy.lang import Builder
from kivy.properties import ObjectProperty
from kivy.clock import Clock

Builder.load_file("kv/core.kv")

class Layout(Screen):
    qrTextInput = ObjectProperty(None)
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
    
    def check(self):
        item = self.ids.qrcode # Or access with self.qrTextInput.text
        print(item.text)        
        Clock.schedule_once(self.refocus_ti)

    def refocus_ti(self, *args):
        self.qrTextInput.focus = True


class Core(MDApp):
    def build(self):
        self.theme_cls.primary_palette = "Green"
        return Layout()

if __name__ == '__main__':
    Core().run()

【讨论】:

它告诉我这个错误AttributeError: 'Layout' object has no attribute 'qrTextInput' 对不起,我清理的代码太多了。请查看更新的答案。它现在应该可以工作了。将qrTextInput 添加为ObjectProperty 并将其链接到kv 文件中的输入。

以上是关于如何在kivymd focus agane中制作输入字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 KivyMD、Python 中制作下拉菜单

我如何在 KivyMD 中制作多行标签?

如何在 KivyMD 中添加启动画面

如何在 KivyMD 中隐藏 MDcard 并切换到另一个?

我在 Python/KivyMD 中制作了 MDDialog 但没有正确显示

如何在 KivyMD 中保存用户的输入(图像文件)