如何在 Kivy/Python 中从一个屏幕引用另一个屏幕中的 TextInput?

2023-12-08

我正在尝试制作一个可以计算圆锥体积的应用程序(到目前为止)。 我有一个名为 ConeVolumeScreen 的屏幕,其中有两个 TextInput 小部件。

<ConeVolumeScreen>:
    BoxLayout:
        orientation: ...
        padding: ...
        spacing: ...
        Label:
            text: 'Radius:'
        TextInput:
            id: cone_vol_radius
            multiline: False
            input_type: 'number'
        Label:
            text: 'Height:'
        TextInput:
            id: cone_vol_height
            multiline: False
            input_type: 'number'
        Button:
            text: 'Solve'
            on_release: app.root.changeScreen('solve cone volume')               

人们应该将圆锥体的半径和高度输入到这两个小部件中。然后,用户可以单击按钮转到名为 SolveConeVolumeScreen 的下一个屏幕。在此屏幕中,有一个标签,应打印该人指定的圆锥体的体积。

<SolveConeVolumeScreen>:
    BoxLayout:
        orientation: ...
        padding: ...
        spacing: ...
        Label:
            text: app.getConeVolume(cone_vol_radius, cone_vol_height)

getConeVolume() 是这里的一个方法

class CalculatorRoot(BoxLayout):
    def __init__(self, **kwargs):
        super(CalculatorRoot, self).__init__(**kwargs)
        self.screen_list = []

    def changeScreen(self, next_screen):
        if self.ids.calc_screen_manager.current not in self.screen_list:
            self.screen_list.append(self.ids.calc_screen_manager.current)

        if next_screen == 'volume':
            self.ids.calc_screen_manager.current = 'volume_screen'
        elif next_screen == 'area_screen':
            self.ids.calc_screen_manager.current = 'area_screen'
        elif next_screen == 'surface area':
            self.ids.calc_screen_manager.current = 'surfarea_screen'
        elif next_screen == 'cone volume':
            self.ids.calc_screen_manager.current = 'coneVolume_screen'
        elif next_screen == 'solve cone volume':
            self.ids.calc_screen_manager.current = 'solveConeVolume_screen'
        elif next_screen == 'rectangular based pyramid volume':
            self.ids.calc_screen_manager.current = 'rectPyramidVolume_screen'

    def onBackButton(self):
        if self.screen_list:
            self.ids.calc_screen_manager.current = self.screen_list.pop()
            return True
        return False



class CalculatorApp(App):
    def __init__(self, **kwargs):
        super(CalculatorApp, self).__init__(**kwargs)
        Window.bind(on_keyboard=self.onBackButton)

    def onBackButton(self, window, key, *args):
        if key == 27:
            return self.root.onBackButton()

    def build(self):
        return CalculatorRoot()

    def getConeVolume(self, r, h):
        first_step = 'π * ' + str(r) + '^2 * ' + str(h) + ' / 3\n'
        rr = round(r * r, 2)
        second_step = 'π * ' + str(rr) + ' * ' + str(h) + ' / 3\n'
        rh = round(rr * h, 2)
        third_step = 'π * ' + str(rh) + ' / 3\n'
        pirh = round(pi * rh, 2)
        fourth_step = str(pirh) + ' / 3\n'
        result = round(pi * rh, 2)
        final_step = 'The answer is ' + str(result) + '.'
        thing = first_step + second_step + third_step + fourth_step + final_step
        return thing

但错误表明cone_vol_radius 未定义。

 ...
 128:        spacing: min(root.width, root.height) * .02
 129:        Label:

130:文本:app.getConeVolume(cone_vol_radius,cone_vol_height) 131: 132:: ... BuilderException:解析器:文件“/Users/fayzulloh/Desktop/Calculator App/calculator.kv”,第 130 行: ... 128: 间距: min(root.width, root.height) * .02 129:标签: 130:文本:app.getConeVolume(cone_vol_radius,cone_vol_height) 131: 132:: ... 名称错误:名称“cone_vol_radius”未定义

请帮忙。我真的很感激任何建议。

这是我的屏幕管理器

<CalculatorRoot>:
    orientation: "vertical"

    ScreenManager:
        id: calc_screen_manager
        StartScreen:
            name: 'start_screen'
        VolumeScreen:
            id: volume_screen
            name: 'volume_screen'
        AreaScreen:
            id: area_screen
            name: 'area_screen'
        SurfaceAreaScreen:
            id: surfarea_screen
            name: 'surfarea_screen'
        ConeVolumeScreen:
            id: coneVolume_screen
            name: 'coneVolume_screen'
        SolveConeVolumeScreen:
            id: solveConeVolume_screen
            name: 'solveConeVolume_screen'
        RectPyramidVolumeScreen:
            id: rectPyramidVolume_screen
            name: 'rectPyramidVolume_screen'

Errors

该应用程序中有几个错误。

名称错误 - 解决方案

Add root.ids.ids.coneVolume_screen.ids.到论点。

属性错误

解决NameError之后,会出现AttributeError。AttributeError: 'NoneType' object has no attribute 'ids'。这是因为内部 id 尚不可用。

Kivy 语言 » ids

Note最外面的小部件在应用任何其他规则之前将 kv 规则应用于其所有内部小部件。这意味着如果 内部小部件包含 id,这些 id 可能在运行期间不可用 内部小部件的__init__功能。

AttributeError: ids - 解决方案

  1. Give an id到标签,例如id: result
  2. Add an on_pre_enter要调用的事件getConeVolume() method.
  3. 将 TextInput 对象替换为 TextInput 的文本,即替换cone_vol_radius and cone_vol_height with cone_vol_radius.text and cone_vol_height.text分别。
  4. Add int()将 TextInput 的文本/字符串转换为整数的函数。

Snippet

<SolveConeVolumeScreen>:
    on_pre_enter:
        root.ids.result.text = app.getConeVolume(int(app.root.ids.coneVolume_screen.ids.cone_vol_radius.text), int(app.root.ids.coneVolume_screen.ids.cone_vol_height.text))

    BoxLayout:
        orientation: 'vertical'
        Label:
            id: result

Output

Img01 - ConeVolume Screen Img02 - SolveConeVolume Screen

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

如何在 Kivy/Python 中从一个屏幕引用另一个屏幕中的 TextInput? 的相关文章

  • Pandas 将行中的非空值获取到一个单元格中[重复]

    这个问题在这里已经有答案了 给定以下数据框 a pd DataFrame A 1 2 B 4 0 C 1 2 a A B C 0 1 4 1 1 2 0 2 我想创建一个新专栏D包含由列分隔的非空值 每行 像这样 A B C D 0 1 4
  • Python包不安装子模块

    我在 dev 分支中创建了一个具有以下结构的包 在验证包安装正确之前不会合并到 main mypackage init py setup py requirements txt module py subpackage one init p
  • 为什么Python有最大递归深度?

    Python有最大递归深度 但没有最大迭代深度 为什么递归受到限制 把递归当成迭代来对待 而不限制递归调用的次数不是更自然吗 我只想说这个问题的根源来自于尝试实现流 参见这个问题 https stackoverflow com questi
  • ipdb 和 pdb++ 之间的区别?

    Python 有一个名为 pdb 的默认调试器 但社区创建了一些替代品 其中两个是ipdb https github com gotcha ipdb and pdb https github com pdbpp pdbpp 它们似乎迎合了相
  • Pyenv 无法在 Cygwin 上安装 python: ModuleNotFoundError: No module named '_ctypes'

    我正在尝试设置 Cygwin 环境以使用 pyenv 来管理 python 版本 我没有管理员权限 所以我使用以下命令运行设置 no admin flag 我使用 Cygwin 包管理器应用程序解决了一些依赖关系 但我被困在了这一点上 Mo
  • 我怎样才能在python cgi中找到上传的文件名

    我制作了如下简单的网络服务器 import BaseHTTPServer os cgi import cgitb cgitb enable html
  • 创建一个打开文件并创建字典的函数

    我有一个正在处理的文件 我想创建一个读取文件并将内容放入字典中的函数 然后该字典需要通过 main 函数传递 这是主程序 它无法改变 我所做的一切都必须与主程序配合 def main sunspot dict file str raw in
  • 有条件填写 pandas 数据框

    我有一个数据框df列中包含浮点值A 我想添加另一列B这样 B 0 A 0 for i gt 0 B i if np isnan A i then A i else Step3 B i if abs B i 1 A i B i 1 lt 0
  • 将 matplotlib png 转换为 base64 以在 html 模板中查看

    背景 你好 我正在尝试制作一个简单的网络应用程序 按照教程计算阻尼振动方程 并将结果的 png 返回到 html 页面 然后将其转换为 Base64 字符串 Problem 该应用程序运行正常 只是在计算结果时返回损坏的图像图标 可能是因为
  • Python 字典 - 在 2 个字符的字符串中查找第二个字符,该字符产生最小值

    我想提交密钥的第一部分并返回该密钥的剩余部分 以最小化值 并从第一部分开始 例如 d ab 100 ac 200 ad 500 如果我要进去 a I would like to return b min d s s for s in d i
  • 使用 Python 的文本中的词频但忽略停用词

    这给了我文本中单词的频率 fullWords re findall r w allText d defaultdict int for word in fullWords d word 1 finalFreq sorted d iterit
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在
  • 在ansible中合并字典

    我目前正在构建一个使用 ansible 安装 PHP 的角色 并且在合并字典时遇到一些困难 我尝试了多种方法来做到这一点 但我无法让它像我想要的那样工作 A vars file my default values key value my
  • 如何使用 jira-python 设置 fixVersions 字段

    我正在尝试使用 jira python 模块 http jira python readthedocs org en latest 更新现有的 JIRA 具体来说 我正在尝试设置问题的fixesVersion 列表 我已经尝试了一段时间但没
  • Floyd-Warshall 算法:获取最短路径

    假设一个图由一个表示n x n维数邻接矩阵 我知道如何获得所有对的最短路径矩阵 但我想知道有没有办法追踪所有最短路径 Blow是python代码实现 v len graph for k in range 0 v for i in range
  • 有没有任何方法可以使用 openpyxl 获取 .xlsx 工作表中存在的行数和列数?

    有没有任何方法可以使用 openpyxl 获取 xlsx 工作表中存在的行数和列数 在xlrd中 sheet ncols sheet nrows 将给出列数和行数 openpyxl中有这样的方法吗 给定一个变量sheet 可以通过以下方式之
  • 使用 Flask-SQLAlchemy 进行多对多多数据库连接

    我正在尝试使这个多对多联接与 Flask SQLAlchemy 和两个 MySQL 数据库一起工作 并且它非常接近 只是它为联接表使用了错误的数据库 这是基础知识 我有main db and vendor db 表格设置为main db u
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • Jupyter Notebook 中的多处理与线程

    我试图测试这个例子here https ipywidgets readthedocs io en stable examples Widget 20Asynchronous html将其从线程更改为多处理 在 jupyter Noteboo
  • python中匹配3个或更多相同的字符

    我正在尝试使用正则表达式在字符串中查找三个或更多相同的字符 例如 你好 不匹配 噢 会的 我尝试过做类似的事情 re compile 1 3 a zA Z re compile w 1 5 但似乎都不起作用 w 1 2 是您正在寻找的正则表

随机推荐

  • mysql和DECIMAL存储空间?

    根据我对手册的理解DECIMAL在 mysql 文档中 它指出九个数字的每个倍数需要 4 个字节 其余数字如下 number of digits leftover bytes 0 0 1 1 2 1 3 2 4 2 5 3 6 3 7 4
  • 对与另一个数组相关的数组进行排序

    我有两个数组 x and y 其中 y 是中每个元素的十位值x 现在我想排序y 但是 顺序y将不同于x的 所以 在对哪个元素进行排序后我无法判断y例如 与x 0 也许我想要 双重排序 Array Sort has 超载接受two数组 一份用
  • 更新 MySQL 中的列

    我有一张桌子table1三列和一堆行 key col col a col b 我想用一组值更新 col a 即离开col b不变 像这样 INSERT INTO table1 AS t1 key col col a VALUES k1 fo
  • 将两个 UISplitViewController 子控制器保留在第一响应者链中

    我有一个基于文档的应用程序 其中 NSSplitViewController 作为主窗口的内容视图控制器 左窗格包含带有控制器的自定义视图 该控制器实现一些菜单命令 右窗格包含一个带有控制器的标准 NSTableView 当应用程序启动时
  • 基于 Eclipse JSDT 的编辑器的内容辅助

    在 Eclipse 中 内容辅助通常由某个类实现implements IContentAssistProcessor JavaDoc example 如何实现同样的CompletionProposals 用于基于 JSDT 的编辑器 我知道
  • 如何在整个应用程序中禁用 iOS 11 拖动?

    出于安全原因 我想在整个应用程序中禁用新的 iOS 11 拖放功能 更具体地说是拖动部分 在 iOS 11 中 默认情况下 所有可以选择文本的地方 弹出窗口 文本视图 网页视图等 的文本都会发生这种情况 我不知道有什么方法可以完全禁用拖动功
  • 使用提交消息中的主题标签在 Jenkins/Hudson 中触发构建

    仅当提交消息中出现特定字符串时 是否可以触发 Hudson Jenkins 构建 例如 我想触发一个构建 通过编写如下提交消息来将我的应用程序推出到开发环境 MYPROJECT 123 修复了 MyClass java 中的 NPE 部署
  • 如何检测 iOS 应用程序是否已重新安装(从 XCode)或升级(从 AppStore)

    我们正在开发的应用程序使用应用程序包中包含的二进制文件 由于需要处理该文件 并且在某些情况下需要重写该文件 因此应用程序会在首次启动时或每当应用程序支持中缺少该文件时 都会将此文件复制到 库 应用程序支持 目录中 然后 应用程序每次启动时都
  • 如何在开始滚动之前为 LazyColumn/ViewPager 设置阈值?

    我正在使用实验性浏览器Jetpack compose 是基于LazyColumn Row 我想做的是设置一些阈值 确定在开始滚动到下一页之前我需要移动手指多少 默认行为是 只要我移动手指 它就会开始滚动 但我希望有一个更大的阈值 即在发生任
  • Terraform 生命周期忽略更改

    我正在尝试对资源资源 aws servicecatalog provisioned product 中的参数应用生命周期ignore changes规则 如下所示 resource aws servicecatalog provisione
  • 如何递归地“扩展”XML/XSD 中的所有内容?

    是否有任何应用程序可以使用带有某些包含的 XML 文件 实际上是 wsdl 作为输入 并递归地浏览这些包含以生成最终的 XML 确实很大 并将目标包含合并到其中 说明 BDS 2006 WSDL 导入程序无法处理包含内容 并且导入的 xsd
  • 接受 POST 请求的 Node.js 服务器

    我正在尝试允许 javascript 与 Node js 服务器进行通信 POST 请求 网络浏览器 var http new XMLHttpRequest var params text stuff http open POST http
  • 空手道启动功能

    需要在所有测试用例执行之前执行 健康检查 测试 功能 这就像执行一堆测试用例之前的初步测试 如果任何预检查失败 则需要退出平台的解决方案 执行您的健康检查功能karate config js using karate call karate
  • 如何使用正则表达式删除末尾可能存在或不存在的模式

    我想在不包含字符串末尾可能存在或不存在的特定模式 括号中的任何内容 的情况下进行捕获 我想捕获以下 3 个示例中除字符串 排除 之外的所有内容 aaaaaa bbbbbb exclude cccccc 我尝试了以下正则表达式 0 1 您可以
  • 将Google结果对象(纯js)转换为Python对象

    所以我尝试使用 Google Map suggest API 来请求地名建议 不幸的是我找不到这方面的文档 下面是一个 URI 示例 返回 suggestion query London 我想在 python 2 5 中使用它 现在 在正确
  • 如何在angularjs中设置范围滑块中的时间?

    我正在使用具有可拖动范围的滑块 https jsfiddle net ValentinH 954eve2L 在 Angular js 中用于时间选择 我想在这个滑块中设置时间 所以我的时钟是从 00 00 到 24 00 但我想设置时间间隔
  • 如何在 Objective C iPhone 编码中播放声音

    我正在开发一个应用程序 它使用一些硬件传感器在屏幕上提供数据 有一个标签随数字更新 我希望每当数字超过 100 或其他值时就播放声音 例如 假设它正在读取数字 然后突然它找到了一个好位置 或其他什么 然后我想要播放声音或点亮灯光 我是一个绝
  • 通过Java找出系统RAM

    我正在编写一个程序 需要在其中进行最小系统 RAM 验证 我如何计算在 JVM 中执行代码的机器的 RAM 我认为纯java根本不可能 在 JVM 中 您只能测量 JVM ram 而不能测量系统 RAM http docs oracle c
  • 在网格上编写随机路径从哪里开始比较合适?

    我不知道从哪里开始 我不是要求别人为我做这件事 但我不知道如何做 所以如果有人能指出我正确的方向 那就太好了 我无法使用谷歌找到任何东西 这就是我需要的 我需要创建一条从网格一侧到另一侧的路径 但不是以随机方式最短 我需要确保如果路径与路径
  • 如何在 Kivy/Python 中从一个屏幕引用另一个屏幕中的 TextInput?

    我正在尝试制作一个可以计算圆锥体积的应用程序 到目前为止 我有一个名为 ConeVolumeScreen 的屏幕 其中有两个 TextInput 小部件