我的應用如下3個步驟:Kivy:如何檢索蟒
- 在步驟1中,用戶輸入一個數字(所有部件都處於
.kv
文件 - 如下面的代碼)。 - 在步驟2中,生成了與步驟1中輸入的編號一樣多的標籤和複選框。然後用戶選擇一些複選框並點擊「確定2」按鈕(因爲第二步的部件數量可能會有所不同,所以它們在
.py
中創建 - 這可能不是最好的方法,但我沒有' t找到了一個更好的主意)。 - 在步驟3中,我獲得了步驟2中生成的複選框的活動狀態,並根據哪一個複選框處於活動狀態,我會執行更多步驟。
我的問題是如何獲得複選框的狀態?當他們被「創建」時,每個人都有一個ID,但是當我打印self.ids
時,這些ID不會出現。如果我將任何參數傳遞給getcheckboxes_active
def,我也會得到一個錯誤。 (無法調用)。
的.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和一個按鈕更加複雜。
<MyWidget>
orientation: "horizontal"
TextInput:
text: root.input_text
id:input
Button:
text:'OK 1'
on_press: root.show(input.text)
非常感謝!即使'print(self.check_ref)'不打印一個'self.check_ref [CheckBox0] .state',我得到錯誤'name'CheckBox0'未定義' 'CheckBox0'編號。 – Enora
'CheckBox0'應該是一個字符串是嗎? – ODiogoSilva
對不起!最後一個問題。爲什麼這個屬性是'state',兩個值是'normal'和'down',而對於'.kv'中的一個複選框,屬性是'active',值是'True'和'False'? – Enora