python - Kivy 选择焦点
问题描述
我试图让 kivy 在焦点上选择 TextInput 小部件的文本,但是当我尝试它时,它似乎在它取消焦点并保留选择时选择了它。有什么想法我可以在焦点上选择它并在取消焦点时选择它吗?如果有人想玩,我在下面附上了我的代码。
.kv 文件:
<TextInput>:
size_hint: 0.9, 0.5
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
multiline: False
<Button>:
text: "Press Me"
size_hint: (0.1, 0.5)
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
<MainLayout>:
canvas.before:
Color:
rgba: 0.15, 0.15, 0.16, 1
Rectangle:
pos: self.pos
size: self.size
BoxLayout:
orientation: 'vertical'
padding: 10
BoxLayout:
padding: 10
TextInput:
text: "Directory"
Button:
text: "Browse"
on_press: root.browse_btn()
BoxLayout:
padding: 10
TextInput:
text: "Prefix"
on_focus: self.select_all()
TextInput:
text: "File"
on_focus: self.select_all()
TextInput:
text: "Suffix"
on_focus: self.select_all()
BoxLayout:
padding: 10
Button:
id: button_one
text: "Confirm"
on_press: root.confirm_btn()
Button:
text: "Cancel"
on_press: root.cancel_btn()
蟒蛇文件:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.core.window import Window
from kivy.config import Config
Config.set('graphics', 'resizable', 0)
class MainLayout(BoxLayout):
button_id = ObjectProperty(None)
def browse_btn(self):
print("Hey")
def confirm_btn(self):
print("Confirm")
def cancel_btn(self):
print("Cancel")
class BatchRenameApp(App):
def build(self):
self.title = "Batch File Rename"
Window.size = (750, 250)
return MainLayout()
if __name__ == '__main__':
app = BatchRenameApp()
app.run()
解决方案
很好地隐藏在TextInput
文档中:
当 TextInput 获得焦点时,选择被取消。如果您需要在 TextInput 获得焦点时显示选择,您应该延迟(使用 Clock.schedule)对用于选择文本的函数(select_all、select_text)的调用。
因此,在您的 中kv
,首先导入Clock
:
#: import Clock kivy.clock.Clock
TextInput
然后你可以在规则中使用它:
TextInput:
text: "Prefix"
on_focus: Clock.schedule_once(lambda dt: self.select_all()) if self.focus else None
if self.focus
确保只有在获得焦点select_all
时才会发生。TextInput
推荐阅读
- c - 为什么直接给出字符串和读取字符串时strlen返回不同的值?
- ios - 如何使用 Macaw iOS 库从 url 显示 svg
- python - 加入数据框的过滤器在 pyspark 中不起作用
- java - 将 JSON ListView 转换为 Fragment
- windows - 如何修复我在 Windows 中遇到的这个 JMeter LoggerAppender 错误?
- python - Python:如何动态更新多个变量/字段
- scala - 如何在 Gatling 中创建基本的分页逻辑?
- java - 如何在 laravel 中返回 Content 类型?
- kotlin - 带有 Java 超类的 Kotlin 数据类
- c++ - GCC avx2intrin.h(版本 X-9.2)中缺少 _mm_broadcastsd_pd