【问题标题】:Kivy - Cannot keep focus in TextInput after submiting, Enter key does not confirm itKivy - 提交后无法在TextInput中保持焦点,Enter键不确认
【发布时间】:2020-08-09 16:42:51
【问题描述】:

所以我设法在 TextInput > tracknumb 中获得焦点。在应用程序启动时,但是当我确认输入时,最后我现在也可以使用 enter 来完成,但是一旦我提交它就会失去 textinput 的焦点。 你能告诉我我错过了什么吗?

Whole Code here

import kivy
import kivy
import mysql.connector
from datetime import datetime
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.image import Image
from kivy.core.audio import SoundLoader
from kivy.core.window import Window
from kivy.clock import Clock

Window.size = (480, 800)

class MyGrid(GridLayout):
    def __init__(self, **kwargs):
        super(MyGrid, self).__init__(**kwargs)

        self.cols = 1  # Set columns for main layout
        self.inside = GridLayout(cols=2, row_force_default=True,
                                 row_default_height=50, padding=20,
                                 spacing=10)  # Create a new grid layout
        self.add_widget(Label(text="Tracking Number \n Checker", halign="center", font_size=40))  # Top Label
        self.inside.add_widget(Label(text="Work Number:", halign="center", font_size=20))  # Add a label widget
        self.worknumb = TextInput(text_validate_unfocus=True, multiline=False, font_size=20, halign="center")
        self.inside.add_widget(self.worknumb)
        self.inside.add_widget(Label(text="Tracking \nNO. Scan:", halign="center", font_size=20))
        self.tracknumb = TextInput(multiline=False, font_size=15, halign="center")  # Create a Text input box stored in the name variable
        self.inside.add_widget(self.tracknumb)  # Add the text input widget to the GUI

        self.add_widget(self.inside)  # Add the interior layout to the main
        self.submit = Button(text="Submit", font_size=40, size_hint =(.5, .5))  # Submit button
        self.add_widget(self.submit)
        self.submit.bind(on_press=self.send_tracknumb)
        self.resultbox = Image(source="status.png")  #image box on bottom
        self.add_widget(self.resultbox)

        Window.bind(on_key_down=self.pressed)
        Clock.schedule_once(self.focus_tracknumb, 1)
    def pressed(self, instance, keyboard, keycode, text, modifiers):
        if keycode == 40 or keycode == 13:
            self.send_tracknumb(None)

    def focus_tracknumb(self, _):
        self.tracknumb.focus = True
    def send_tracknumb(self, _):
        tracknumb = self.tracknumb.text
        worknumb = self.worknumb.text
        errorsound = SoundLoader.load("incorrect.mp3")  # add sound to the scanning
        correctsound = SoundLoader.load("correct.ogg")
        self.tracknumb.text = ""  # Reset text to blank in each text input

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    我认为您可以在pressed() 方法中将焦点更改回TextInput

    def pressed(self, instance):
        tracknumb = self.tracknumb.text
        worknumb = self.worknumb.text
        errorsound = SoundLoader.load("incorrect.mp3") #add sound to the scanning
        correctsound = SoundLoader.load("correct.ogg")
        self.tracknumb.text = "" # Reset text to blank in each text input
        self.tracknumb.focus = True  # Change focus back to tracknumb
    

    【讨论】:

    • 那个没有帮助,但我终于设法让 Enter 键工作,它专注于应用程序的开始,这不是很有用,但提交后它会再次失去焦点。跨度>
    【解决方案2】:

    Och dong,我错过了 :D 太简单了,我不得不把函数放到那个部分

    def send_tracknumb(self, _):
    

    我错过了所有文本中的那个:{

    Clock.schedule_once(self.focus_tracknumb, 0.1)
    

    【讨论】:

      猜你喜欢
      • 2015-06-07
      • 1970-01-01
      • 2018-08-30
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 2016-04-23
      • 2013-07-03
      相关资源
      最近更新 更多