python代码中的Kivy ids

2023-12-06

main:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.widget import Widget


class testclass:
    def someth(txt):
        print (txt)
        #how get  access to textinput from begin Screen here?
class BeginScreen(Screen):
    def __init__(self,**kwargs):
        super().__init__()
        self.layout =BoxLayout(orientation='vertical',padding=20,spacing=5,)
        self.btn=Label(text=str('Hello'))
        self.layout.add_widget(self.btn)
        self.btn=TextInput(id='test',text='')
        self.layout.add_widget(self.btn)
        self.btn=Button(text='Button!', on_press=testclass.someth('?'))
        # what write in ? to send textinput text to testclass.someth?
        self.layout.add_widget(self.btn)
        self.add_widget(self.layout)
        print(self.layout.ids) #why i have no ids? textinput have id

class TestApp(App):   
    from kivy.config import Config
    Config.set('graphics', 'width', '800')
    Config.set('graphics', 'height', '400')
    def build(self):
        sm = ScreenManager()
        sm.add_widget(BeginScreen(name='test'))
        return sm
TestApp().run()

那么我如何访问文本输入呢?我有 id='test' 但当我打印布局时 id 说我没有。为什么?有人可以向我解释我做错了什么,我怎样才能改正呢?


从 functools 导入部分

要访问外部方法中的文本输入,您可以使用部分函数或 lambda 函数。

self.ids

因为您没有 kv 文件,所以您得到 None 或空字典。

Note

当你的 kv 文件被解析时,kivy 会收集所有用 id 标记的小部件,并将它们放置在 self.ids 字典类型属性中。

详细请参考我下面的例子。

Example

main.py

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from functools import partial


class testclass:
    def someth(*args, txt):
        print(txt)


class BeginScreen(Screen):
    def __init__(self, **kwargs):
        super(BeginScreen, self).__init__(**kwargs)
        layout = BoxLayout(orientation='vertical', padding=20, spacing=5)
        layout.add_widget(Label(text=str('Hello')))

    # layout.add_widget(TextInput(id='test', text=''))  # id in python+kivy is deprecated
    txtInput = TextInput(text='text input')
    layout.add_widget(txtInput)
    self.ids['test'] = txtInput

    layout.add_widget(Button(text='Button!', on_press=partial(testclass.someth, txt=self.ids.test.text)))
    self.add_widget(layout)

    print("self.ids={}".format(self.ids))
    print("self.ids['test']={}".format(self.ids['test']))
    print("self.ids['test'].text={}".format(self.ids['test'].text))
    print("self.ids.test.text={}".format(self.ids.test.text))
    for key, val in self.ids.items():
        print("key={0}, val={1}".format(key, val))


class TestApp(App):
    from kivy.config import Config
    Config.set('graphics', 'width', '800')
    Config.set('graphics', 'height', '400')

    def build(self):
        sm = ScreenManager()
        sm.add_widget(BeginScreen(name='test'))
        return sm

TestApp().run()

Output

Button Pressed

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python代码中的Kivy ids 的相关文章

随机推荐

  • 是否可以从列表中的项目获取索引?

    我的意思是 我有一个列表框 我将列表放入 itemsSource 属性中 我还想显示它的绑定中的索引 我不知道这在 WPF 中是否可行 谢谢 有几种方法可以做到这一点 包括使用 AlternationIndex 的一些解决方法 但是 由于我
  • iOS,将文件从收件箱文件夹复制到文档路径

    我启用了文档类型以将文件从其他应用程序导入或复制到我的应用程序 我有一些疑问 1 应该在哪里创建将文件从收件箱移动到文档目录的方法 这是正确的地方吗 func applicationWillEnterForeground applicati
  • 将语音输出解析为 JSON 以调用应用程序 API

    这是一个想法 我们有带有公开的 Restful API 的 Web 应用程序 它接受 json 现在 如何使用 Google 语音 API 获取用户语音输入 将其转换为文本 然后以某种方式将该文本转换为 API 所需的 JSON 然后使用
  • 未找到样式属性 attr/@attr/minTextSize

    我长期以来一直在尝试找出问题所在 但不幸的是无法 If I do android enableAapt2 true 代码工作正常 但是删除相同的代码 应该是强制的 会抛出错误 incremental mergeDevDebugResourc
  • 如何合并两个文件?

    我有两个文件 File 1 7118 7457 7591 7539 8001 File 2 5003 5008 5011 5026 5028 5029 5031 我需要的输出 7118 5003 7457 5003 7591 5003 75
  • Scala 中的右关联方法有什么好处?

    我刚刚开始使用 Scala 并且刚刚了解了如何创建方法右结合 与更传统的左结合性在命令式面向对象语言中很常见 起初 当我看到示例代码时consScala 中的列表 我注意到每个示例总是在右侧有列表 println 1 List 2 3 4
  • Elasticsearch - 从 6.7 升级到 7.0 后,此搜索不会返回正确的结果

    query constant score filter bool should terms field a value1 value2 must term field b value
  • JPEG编码器速度超慢,如何优化?

    我正在 Flash 构建器中使用 actionscript 3 0 构建一个应用程序 这是一个后续问题这个问题 我需要将字节数组上传到我的服务器 但是我使用的函数将位图数据转换为ByteArray速度超级慢 慢到我的移动设备都卡住了 我的代
  • Sencha Touch 复选框字段具有带有长标签的时髦布局

    我的应用程序中的几个复选框字段有很长的标签 不幸的是它会导致一些奇怪的行为 有什么办法可以让这个看起来好一点吗 我的意思是 如果我 触摸 灰色区域 复选框不会激活 即使复选框位于灰色区域内 但我必须单击白色区域 这有点令人困惑 即使我设定l
  • 如何在 Oracle 查询中禁用 PL/SQL

    以下是我希望阻止在我的服务器上运行的查询类型的示例 begin While True LOOP dbms output put line tst END LOOP end 此查询 或其他类似查询 可能通过 Oracle JDBC 瘦驱动程序
  • Swift - 更新/刷新显示时间的标签

    我有一个以 12 小时格式显示当前时间的标签 但是 它不会在每次分钟 小时更改时更新 刷新时间 我需要它在时间改变时自动将标签更改为当前时间 斯威夫特 3 解决方案 class ViewController IBOutlet weak va
  • onfocus时如何更改文本框的背景颜色?

    我尝试了这段代码 但它不起作用 当我聚焦文本框时 它显示错误 function ChangeBgColor obj evt if evt type focus style background lightgrey else if evt t
  • bxslider 上 z 索引元素的顺序

    我需要使用无子元素来订购 bxslider 的内容 图像和顶部文本之间 e g div ul li img src image1 jpg span text span li ul div class under text over imag
  • Facebook ShareDialog 中未显示说明

    我正在 Android 应用程序中使用 Facebook 的 ShareDialog 尝试 ShareLinkContent 以下是我使用过的代码片段 我有帖子所需的内容标题和描述 当我尝试发布它时在手机中显示时很好 但是当我在 Faceb
  • 在Python 2.7中读取大型lz4压缩JSON数据集[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我需要分析作为 lz4 压缩 JSON 文件分发的大型数据集 压缩后的文件将近1TB 由于成本原因 我不想将其解压缩到磁盘 数据集中的每条 记录 都非常小 但将整个数据集读入内存显然是不可
  • 不使用 Azure 客户端 SDK 连接到 IoT 中心

    我想不使用客户端 SDK 连接到 Azure Iot Hub 在https azure microsoft com nb no blog upload files from devices with azure iot hub 有关于如何执
  • 如何添加到 Windows 中的 PYTHONPATH,以便它找到我的模块/包?

    我有一个目录 其中托管我的所有 Django 应用程序 C My Projects 我想将此目录添加到我的PYTHONPATH这样我就可以直接调用应用程序 我尝试添加C My Projects 到我的 WindowsPath来自 Windo
  • 将文档上传到 Google 云端硬盘时检测冲突

    我的 Android 应用程序更新了 Google 云端硬盘文档 该文件也可以在其他地方修改 例如通过云端硬盘网络界面 因此文件上传可能会发生冲突 然而 这种情况应该很少发生 这就是为什么我不希望我的应用程序首先查询修订历史记录 因为这在大
  • e.target 和 e.currentTarget 之间的区别

    我不明白其中的区别 它们看起来相同 但我想它们不是 何时使用其中之一的任何示例将不胜感激 e target是什么触发事件调度程序触发和e currentTarget是您为侦听器分配的内容
  • python代码中的Kivy ids

    main from kivy app import App from kivy uix button import Button from kivy uix screenmanager import ScreenManager Screen