gpt4 book ai didi

python - Kivy:如何检索在 python 中创建的复选框(或其他小部件)的 ID 或事件状态

转载 作者:行者123 更新时间:2023-11-30 22:41:24 25 4
gpt4 key购买 nike

我的应用程序分为 3 个步骤:

  • 在第 1 步中,用户输入一个数字(所有小部件都位于 .kv 文件中 - 参见下面的代码)。
  • 在步骤 2 中,将生成与步骤 1 中输入的数量一样多的标签和复选框。然后用户选择一些复选框并单击“OK 2”按钮。(因为第二步的小部件数量可能会有所不同,所以它们是在 .py 中创建的 - 这可能不是最好的方法,但我还没有找到更好的主意)。
  • 在步骤 3 中,我获取了步骤 2 中生成的复选框的事件状态,并根据哪个复选框处于事件状态,我执行了更多步骤。

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

.py:

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,因为“第 1 步真实应用程序”比 TextInput 和 Button 复杂得多。

<MyWidget>
orientation: "horizontal"
TextInput:
text: root.input_text
id:input
Button:
text:'OK 1'
on_press: root.show(input.text)

最佳答案

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

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

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)

关于python - Kivy:如何检索在 python 中创建的复选框(或其他小部件)的 ID 或事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42579840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com