首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Kivy:如何检索python中创建的复选框(或其他小部件)的ids或活动状态

Kivy:如何检索python中创建的复选框(或其他小部件)的ids或活动状态
EN

Stack Overflow用户
提问于 2017-03-03 05:12:44
回答 2查看 2.4K关注 0票数 1

我的应用程序有三个步骤:

  • 在步骤1中,用户输入一个数字(所有小部件都在下面的代码所在的.kv文件-cf中)。
  • 在步骤2中,生成与步骤1中输入的数字一样多的标签和复选框。然后,用户选择一些复选框并单击按钮"OK 2“。(因为第二步的小部件数量可能有所不同,所以在.py -it中创建它们可能不是最好的方法,但我没有找到更好的方法)。
  • 在步骤3中,我得到了在步骤2中生成的复选框的活动状态,并且根据其中一个是活动的还是不活动的,我做了更多的步骤。

我的问题是如何获得复选框的状态?当它们被“创建”时,每个id都有一个id,但是当我打印self.ids时,这些id不会出现。如果我将任何参数传递给getcheckboxes_active def,也会得到一个错误。(没有一个是不可调用的)。

.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.checkbox import CheckBox 
from kivy.uix.button import Button 
from kivy.properties import StringProperty

class MyWidget(BoxLayout):
    input_text = StringProperty("10")


    def show(self, number):
        layout = BoxLayout(padding=10, orientation="vertical")
        for each in range(int(number)):
            layout2 = BoxLayout(padding=10, orientation="horizontal")
            l=Label(bold= True,font_size=20, text='Hello', markup = True)
            c= CheckBox(id = "CheckBox"+str(each))
            layout2.add_widget(l)
            layout2.add_widget(c)
            layout.add_widget(layout2)
        button = Button(text="OK 2")
        button.bind(on_press=self.getcheckboxes_active)  # self.getcheckboxes_active(self, "test") give an error None is not callable
        layout.add_widget(button)
        self.add_widget(layout)

        self.input_text = "Done"

    def getcheckboxes_active(self, *arg):
        '''how to get the active state of all checkboxed created in def show'''
        print(self.ids)  # CheckBoxes id aren't displayed
        print(*arg)
        print("State of all checkboxes")

class MyApp_auto(App):
    def build(self):
        return MyWidget()
MyApp_auto().run()

.kv:我需要一个.kv,因为“第一步真正的应用程序”比TextInput和Button要复杂得多。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<MyWidget>
    orientation: "horizontal"
    TextInput:
        text: root.input_text
        id:input
    Button:
        text:'OK 1'
        on_press: root.show(input.text)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-03 06:50:18

这里的问题是,ids字典中只填充了在.kv文件中定义的id值,即而不是.kv中的

但是,您可以创建自己的字典,其中包含对CheckBox小部件的引用。与其在创建小部件时提供id属性,不如填充一个MyWidget的字典属性(让我们称之为check_ref),它将您的id与每个CheckBox实例链接起来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyWidget(BoxLayout):
    input_text = StringProperty("10")

    check_ref = {}

    def show(self, number):
        layout = BoxLayout(padding=10, orientation="vertical")
        for each in range(int(number)):
            layout2 = BoxLayout(padding=10, orientation="horizontal")
            l=Label(bold= True,font_size=20, text='Hello', markup = True)
            c = CheckBox()

            # Stores a reference to the CheckBox instance 
            self.check_ref["CheckBox"+str(each)] = c

            layout2.add_widget(l)
            layout2.add_widget(c)
            layout.add_widget(layout2)
        button = Button(text="OK 2")
        button.bind(on_press=self.getcheckboxes_active)  # self.getcheckboxes_active(self, "test") give an error None is not callable
        layout.add_widget(button)
        self.add_widget(layout)

        self.input_text = "Done"

    def getcheckboxes_active(self, *arg):
        '''how to get the active state of all checkboxed created in def show'''
        # Iterate over the dictionary storing the CheckBox widgets
        for idx, wgt in self.check_ref.items():
             print(wgt.active)

        # You can also get a specific CheckBox
        # print(self.check_ref[--my id--].active)
票数 3
EN

Stack Overflow用户

发布于 2018-02-21 15:37:38

可能是一种常见的场景:使用前面提到的字典概念,从字符串列表中创建标签及其相应的复选框,然后将选中的复选框标签显示为另一个标签的文本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class BuildRequester(BoxLayout):
    chkref = {}
    def on_checkbox_active(self,chkbox,value):
        self.ids.label2.text = 'Selected ' + self.chkref[chkbox]
    def __init__(self, **kwargs):
        super(BuildRequester,self).__init__(**kwargs)
        prods = [' B_0003',' B_0007',' B_0008', ' B_0200']

        for i in range(4):
            self.add_widget(Label(text=prods[i],italic=True,bold=True))
            chkbox = CheckBox(group='1',color=[0.1,1,0,4])
            chkbox.bind(active=self.on_checkbox_active)
            self.add_widget( chkbox)
            self.chkref[chkbox]= prods[i]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42579840

复制
相关文章
如何使用 Bootstrap 创建加载、重定向或动作状态的进度条
Bootstrap 进度条。在本教程中,您将看到如何使用 Bootstrap 创建加载、重定向或动作状态的进度条。
好派笔记
2021/09/18
1.9K0
python中的异或运算
leetcode上有这么一道题:【136. Single Number】 这个题是给出一个非空列表,里面的元素只有一个只出现了一次,其余都出现了两次,找出这个只出现了一次的元素。 这个题目很简单,写了一下直接提交:
生信编程日常
2020/05/19
6K0
WPF如何在子线程或其他类中操控控件
一开始使用WPF界面的时候,会有这样的需求就是在后台更新控件,以完成列表更新,计时器,进度条等功能,但WPF这边架构限制,决定子线程是不安全的,如果创建子线程直接操作控件就会出错。
zls365
2021/03/16
2K0
python中的与或非运算符_python与或非
昨天我们学习了 if 嵌套语句的基本语法,并结合实际案例学习基本用法,虽然 if 嵌套语句可以很好的解决我们的问题,但是有时却让代码显得有些复杂了,其实,有时我们可以用一些更简单的方式来解决需要用 if 嵌套解决的问题。比如,驾照考取的年龄限制问题,C1的驾照考取年龄要求必须在18周岁至70周岁之间。针对这个问题,我们先来用 if 嵌套来解决看看。
全栈程序员站长
2022/11/18
2.1K0
检索或设置系统信息的API函数
用户2135432
2023/10/21
1410
java的异或_java中的异或
异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。
全栈程序员站长
2022/11/09
3.4K1
java的异或_java中的异或
Python中的循环(或循环)导入
本文翻译自:Circular (or cyclic) imports in Python
用户7886150
2020/11/30
3.5K0
如何在 Linux 中创建虚拟块或循环设备?
Linux 用户可以拥有一个称为“循环设备”的虚拟块设备,它将普通文件映射到虚拟块,使其成为与隔离进程相关的任务的理想选择。
网络技术联盟站
2022/10/14
4.3K0
如何在 Linux 中创建虚拟块或循环设备?
创建或编辑DOM
将新的字符数据节点追加到此元素节点的子节点列表中。当前节点指针不变;此节点仍然是追加的子节点的父节点。
用户7741497
2022/07/05
8070
Kivy 图形界面开发初体验
•跨平台 Kivy 。编写的程序可在 Linux,Windows,OS X,Android,iOS 和 Raspberry Pi 上运行。•商业友好 。Kivy 基于 MIT 许可证进行开源,可以进行免费的商业使用。•GPU 加速 。Kivy 的图像引擎基于 Open ES 2 构建,性能出众。
州的先生
2021/02/03
8.7K0
Kivy 图形界面开发初体验
python中的热更新或动态加载
遍览网络中关于动态加载模块的文章,发现有两种方法,一种是用守护进程的方法,一种是用python自带的reload函数。
py3study
2020/01/08
1.3K0
javascript ||或运算符的其他用法
关于或运算符的基本用法可以参阅javascript 逻辑||运算符一章节。 其实运算符也可以起到类似于if语句的功能,下面看一段代码实例: function func(arg) { var arg = arg || 5; console.log(arg); } func();
IT工作者
2021/12/29
3400
如何在其他的地方来远程登录家里或单位的电脑?
1、点击[开始菜单] 2、点击[运行] 3、点击[打开] 4、点击[确定]
裴来凡
2022/05/28
9680
如何在其他的地方来远程登录家里或单位的电脑?
VUE中隐藏和限制DIV或其他HTML元素
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序新视界
2019/09/25
4.5K0
JS中的与、或(&&、||)
我们常说的是 与运算 只有表达式都为 true 时,才返回 true,否则返回 false(口诀:全真才真,一假则假)
田小檬
2023/08/24
2390
如何在RHEL 8中安装Python 3或Python 2
在RedHat Enterprise Linux 8中,Python没有预先安装。 主要原因是RHEL 8开发人员不想为用户设置默认的Python版本。 因此,作为RHEL用户,您需要通过安装来指定是否需要Python 3或2。 此外,在RHEL中,Python 3.6是Python的默认和完全支持的版本。 但是,Python 2仍然可用,您可以安装它。
用户8710806
2021/06/09
2.4K0
在JavaScript中,如何创建一个数组或对象?
1:使用数组字面量(Array Literal)语法,使用方括号 [] 包裹元素,并用逗号分隔:
王小婷
2023/10/23
4260
在JavaScript中,如何创建一个数组或对象?
如何解决在DLL的入口函数中创建或结束线程时卡死
通常情况下并不会使用到DLL的MAIN函数,因为delphi的框架已经把Main函数隐藏起来
战神伽罗
2019/07/24
3.8K0
如何解决在DLL的入口函数中创建或结束线程时卡死
python中星号的意义(**字典,*列表或元组)
传递实参和定义形参(所谓实参就是调用函数时传入的参数,形参则是定义函数是定义的参数)的时候,你还可以使用两个特殊的语法:*、** 。 调用函数时使用* ,** test(*args)中 * 的作用:其实就是把序列 args 中的每个元素,当作位置参数传进去。比如上面这个代码,如果 args 等于 (1,2,3) ,那么这个代码就等价于 test(1, 2, 3) 。 test(**kwargs)中** 的作用:则是把字典 kwargs 变成关键字参数传递。比如上面这个代码,如果 kwargs 等于 {
用户1214487
2018/01/24
3.7K0
Python 中如何向列表或数组添加元素
然而,与其它编程语言不同,数组在 Python 中不是一个内置的数据结构。Python 使用列表取代传统的数组。
Python学习者
2023/09/11
4060

相似问题

kivy python小部件实例或所有小部件

13

Python Kivy:动态分配小部件ids的问题

138

python代码中的Kivy ids

14

使用Kivy,如何使复选框的活动(或非活动)状态在第二个屏幕上旋转(或不旋转)?

17

关于微调器小部件在Kivy / Python中如何工作的小疑问

113
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文