代码之家  ›  专栏  ›  技术社区  ›  Nirdesh Kumawat

如何在文本框中选择文本

  •  1
  • Nirdesh Kumawat  · 技术社区  · 7 年前

    我正在使用 python-2.7 kivy .有人在我点击时帮我 TextBox 那么如何使用python或kivy代码选择文本呢?

    测试.py

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.core.window import Window
    Window.clearcolor = (0.5, 0.5, 0.5, 1)
    Window.size = (400, 50)
    
    class abc(BoxLayout):
        pass
    
    class Test(App):
        def build(self):
            return abc()
    
    
    if __name__ == '__main__':
        Test().run()
    

    测试.kv

    <abc>:
        BoxLayout:
            orientation: "vertical"
            size_hint_y: .5
    
            BoxLayout:
                orientation: "horizontal"
                spacing: 10, 10
                size_hint_x: .6
    
                Label:
                    text: "TEXT"
                    text_size: self.size
                    valign: 'middle'
                    size_hint_x: .2
    
                TextInput:
                    size_hint_x: .4
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   eyllanesc Yonghwan Shin    7 年前

    你必须用O n_touch_down 旁边 select_all() 如下图所示:

    #:import Clock kivy.clock.Clock
    
    <abc>:
        BoxLayout:
            orientation: "vertical"
            size_hint_y: .5
    
            BoxLayout:
                orientation: "horizontal"
                spacing: 10, 10
                size_hint_x: .6
    
                Label:
                    text: "TEXT"
                    text_size: self.size
                    valign: 'middle'
                    size_hint_x: .2
    
                TextInput:
                    size_hint_x: .4
                    on_touch_down: Clock.schedule_once(lambda dt: self.select_all())
    

    以类似的方式,您可以从python完成它。

    *Py

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.core.window import Window
    from kivy.uix.textinput import TextInput
    from kivy.clock import Clock
    
    Window.clearcolor = (0.5, 0.5, 0.5, 1)
    Window.size = (400, 50)
    
    class abc(BoxLayout):
        pass
    
    class MyTextInput(TextInput):
        def on_touch_down(self, touch):
            Clock.schedule_once(lambda dt: self.select_all())
            TextInput.on_touch_down(self, touch)
    
    class Test(App):
        def build(self):
            return abc()
    
    
    if __name__ == '__main__':
        Test().run()
    

    *kV

    <abc>:
        BoxLayout:
            orientation: "vertical"
            size_hint_y: .5
    
            BoxLayout:
                orientation: "horizontal"
                spacing: 10, 10
                size_hint_x: .6
    
                Label:
                    text: "TEXT"
                    text_size: self.size
                    valign: 'middle'
                    size_hint_x: .2
    
                MyTextInput:
                    size_hint_x: .4
    
        2
  •  1
  •   Nirdesh    7 年前

    测试.py

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.core.window import Window
    from kivy.uix.textinput import TextInput
    from kivy.clock import Clock
    
    Window.clearcolor = (0.5, 0.5, 0.5, 1)
    Window.size = (400, 50)
    
    class abc(BoxLayout):
        pass
    
    class MyTextInput(TextInput):
        def on_focus(self, instance, isFocused):
            if isFocused:
                Clock.schedule_once(lambda dt: self.selected_text())
    
        def selected_text(self):
            ci = self.cursor_index()
            cc = self.cursor_col
            line = self._lines[self.cursor_row]
            len_line = len(line)
            start = max(0, len(line[:cc]) - line[:cc].rfind(u' ') - 1)
            end = line[cc:].find(u' ')
            end = end if end > - 1 else (len_line - cc)
            Clock.schedule_once(lambda dt: self.select_text(ci - start, ci + end))
    
    
    class Test(App):
        def build(self):
            return abc()
    
    
    if __name__ == '__main__':
        Test().run()
    

    测试.kv

    <abc>:
        BoxLayout:
            orientation: "vertical"
            size_hint_y: .5
    
            BoxLayout:
                orientation: "horizontal"
                spacing: 10, 10
                size_hint_x: .6
    
                Label:
                    text: "TEXT"
                    text_size: self.size
                    valign: 'middle'
                    size_hint_x: .2
    
                MyTextInput:
                    size_hint_x: .4
    
        3
  •  1
  •   ikolim    7 年前

    解决方法如下。有关详细信息,请参阅片段、示例和输出。

    1. 使用 select撘all()em>>a>to select all of the text displayed in the textinput. 注意:如果没有文本,则不选择任何内容。
    2. 当聚焦时,选择被取消。因此,我们使用 clock.schedule_once()延迟文本选择

    text input api说明

    当文本输入被聚焦时,选择被取消。如果需要在文本输入聚焦时显示所选内容,则应延迟(使用clock.schedule)对用于选择文本的函数的调用(全选,选择文本)。

    代码段

    python脚本

    def on_focus(self,instance):
    如果instance.focus:
    clock.schedule_一次(lambda dt:instance.select_all())
    

    Kv文件

    文本输入:
    大小\u提示\u x:.4
    聚焦:根。聚焦(自我)
    

    示例

    主要.py

    从kivy.app导入app 从kivy.uix.boxlayout导入boxlayout 从kivy.core.window导入窗口 从kivy.clock导入时钟 window.clearColor=(0.5、0.5、0.5、1) window.size=(400,50) ABC类(箱布局): 定义焦点(自我,实例): 如果instance.focus: print(“textfinput is focused[focus=]”.format(instance.focus))。 clock.schedule_一次(lambda dt:instance.select_all()) 其他: print(“textfinput is discocused[focus=]”.format(instance.focus))。 等级测试(APP): 定义构建(自身): 返回abc()。 如果“名称”= 测试()。运行())

    试验.kv

    :kivy 1.11.0
    
    <ABC>:
    方框布局:
    方向:“垂直”
    尺寸提示:5
    
    方框布局:
    方向:“水平”
    间距:10,10
    大小\提示\u x:.6
    
    标签:
    文本:“文本”
    文本\大小:self.size
    valign:'中'
    大小\u提示\u x:.2
    
    文本输入:
    大小\u提示\u x:.4
    聚焦:根。聚焦(自我)
    

    输出

    选择“全部”()选择文本输入中显示的所有文本。注意:如果没有文本,则不选择任何内容。
  • 什么时候?文本输入框聚焦,取消选择。因此,我们使用Clock.schedule_once()
  • Text Input » API » Note

    当文本输入被聚焦时,选择被取消。如果需要在文本输入聚焦时显示所选内容,则应延迟(使用clock.schedule)对用于选择文本的函数的调用(全选,选择文本)。

    代码段

    python脚本

    def on_focus(self, instance):
        if instance.focus:
            Clock.schedule_once(lambda dt: instance.select_all())
    

    Kv文件

            TextInput:
                size_hint_x: .4
                on_focus: root.on_focus(self)
    

    例子

    主.py

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.core.window import Window
    from kivy.clock import Clock
    
    Window.clearcolor = (0.5, 0.5, 0.5, 1)
    Window.size = (400, 50)
    
    
    class abc(BoxLayout):
        def on_focus(self, instance):
            if instance.focus:
                print("TextInput is focused [focus={}]".format(instance.focus))
                Clock.schedule_once(lambda dt: instance.select_all())
            else:
                print("TextInput is defocused [focus={}]".format(instance.focus))
    
    
    class Test(App):
        def build(self):
            return abc()
    
    
    if __name__ == '__main__':
        Test().run()
    

    测试.kv

    #:kivy 1.11.0
    
    <abc>:
        BoxLayout:
            orientation: "vertical"
            size_hint_y: .5
    
            BoxLayout:
                orientation: "horizontal"
                spacing: 10, 10
                size_hint_x: .6
    
                Label:
                    text: "TEXT"
                    text_size: self.size
                    valign: 'middle'
                    size_hint_x: .2
    
                TextInput:
                    size_hint_x: .4
                    on_focus: root.on_focus(self)
    

    产量

    enter image description here