Python Kivy:如何打印实例id
我有这个代码,我想在选中复选框后打印实例id。我尝试了Python Kivy:如何打印实例id,python,checkbox,instance,kivy,Python,Checkbox,Instance,Kivy,我有这个代码,我想在选中复选框后打印实例id。我尝试了instance.id和self.ids.instance.ids,但没有成功。只需打印实例就可以得到kivy名称(如)。我使用python 3.6和Kivy 1.9.2.dev0 当我不使用.kv文件时,打印instance.id会起作用(所有应用程序都构建在.py文件中) .kv: #: import CheckBox kivy.uix.checkbox <SampBoxLayout> orientation: "
instance.id
和self.ids.instance.ids
,但没有成功。只需打印实例就可以得到kivy名称(如
)。我使用python 3.6和Kivy 1.9.2.dev0
当我不使用.kv
文件时,打印instance.id
会起作用(所有应用程序都构建在.py
文件中)
.kv:
#: import CheckBox kivy.uix.checkbox
<SampBoxLayout>
orientation: "vertical"
padding: 10
spacing: 10
BoxLayout:
orientation: "horizontal"
size_hint_x: .55
Label:
text: "Favorite Color:"
color: 0, 0, 0, 1
size_hint_x: .265
Label:
text: "Blue"
color: 0, 0, 0, 1
size_hint_x: .15
CheckBox:
group: "fav_color"
id : blue
value: root.blue
size_hint_x: .05
on_active: root.checkbox_color(self, self.active)
Label:
text: "Red"
color: 0, 0, 0, 1
size_hint_x: .15
CheckBox:
group: "fav_color"
value: root.red
size_hint_x: .05
on_active: root.checkbox_color(self, self.active)
#:导入复选框kivy.uix.CheckBox
方向:“垂直”
填充:10
间距:10
盒子布局:
方向:“水平”
尺寸提示:55
标签:
文字:“最喜爱的颜色:”
颜色:0,0,0,1
大小提示:265
标签:
文字:“蓝色”
颜色:0,0,0,1
大小提示:15
复选框:
组:“fav_颜色”
id:蓝色
值:root.blue
尺寸提示:0.05
启用时:root.checkbox\u颜色(self,self.active)
标签:
文字:“红色”
颜色:0,0,0,1
大小提示:15
复选框:
组:“fav_颜色”
值:root.red
尺寸提示:0.05
启用时:root.checkbox\u颜色(self,self.active)
您可以在ID中循环,并检查实例是否存在
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
root = Builder.load_string('''
<MyWidget>:
CheckBox:
id: blue
on_active: root.checkbox_color(self)
CheckBox:
id: red
on_active: root.checkbox_color(self)
''')
class MyWidget(BoxLayout):
def checkbox_color(self, instance):
if instance in self.ids.values():
print(list(self.ids.keys())[list(self.ids.values()).index(instance)])
class MyApp(App):
def build(self):
return MyWidget()
MyApp().run()
从kivy.app导入应用
从kivy.uix.boxlayout导入boxlayout
从kivy.lang导入生成器
root=Builder.load\u字符串(“”)
:
复选框:
id:蓝色
启用:root.checkbox\u颜色(自身)
复选框:
身份证号码:红色
启用:root.checkbox\u颜色(自身)
''')
类MyWidget(BoxLayout):
def复选框颜色(自身,实例):
if self.ids.values()中的实例:
打印(列表(self.ids.keys())[list(self.ids.values()).index(实例)])
类别MyApp(应用程序):
def生成(自):
返回MyWidget()
MyApp().run()
您可以在ID中循环,并检查实例是否存在
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
root = Builder.load_string('''
<MyWidget>:
CheckBox:
id: blue
on_active: root.checkbox_color(self)
CheckBox:
id: red
on_active: root.checkbox_color(self)
''')
class MyWidget(BoxLayout):
def checkbox_color(self, instance):
if instance in self.ids.values():
print(list(self.ids.keys())[list(self.ids.values()).index(instance)])
class MyApp(App):
def build(self):
return MyWidget()
MyApp().run()
从kivy.app导入应用
从kivy.uix.boxlayout导入boxlayout
从kivy.lang导入生成器
root=Builder.load\u字符串(“”)
:
复选框:
id:蓝色
启用:root.checkbox\u颜色(自身)
复选框:
身份证号码:红色
启用:root.checkbox\u颜色(自身)
''')
类MyWidget(BoxLayout):
def复选框颜色(自身,实例):
if self.ids.values()中的实例:
打印(列表(self.ids.keys())[list(self.ids.values()).index(实例)])
类别MyApp(应用程序):
def生成(自):
返回MyWidget()
MyApp().run()
您还可以将kv中的自定义值设置为较短的解决方案:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
root = Builder.load_string('''
<MyWidget>:
CheckBox:
custom_value: "blue"
on_active: root.checkbox_color(self)
CheckBox:
custom_value: "red"
on_active: root.checkbox_color(self)
''')
class MyWidget(BoxLayout):
def checkbox_color(self, instance):
print(instance.custom_value)
class MyApp(App):
def build(self):
return MyWidget()
MyApp().run()
从kivy.app导入应用
从kivy.uix.boxlayout导入boxlayout
从kivy.lang导入生成器
root=Builder.load\u字符串(“”)
:
复选框:
自定义值:“蓝色”
启用:root.checkbox\u颜色(自身)
复选框:
自定义值:“红色”
启用:root.checkbox\u颜色(自身)
''')
类MyWidget(BoxLayout):
def复选框颜色(自身,实例):
打印(实例.自定义值)
类别MyApp(应用程序):
def生成(自):
返回MyWidget()
MyApp().run()
您还可以将kv中的自定义值设置为较短的解决方案:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
root = Builder.load_string('''
<MyWidget>:
CheckBox:
custom_value: "blue"
on_active: root.checkbox_color(self)
CheckBox:
custom_value: "red"
on_active: root.checkbox_color(self)
''')
class MyWidget(BoxLayout):
def checkbox_color(self, instance):
print(instance.custom_value)
class MyApp(App):
def build(self):
return MyWidget()
MyApp().run()
从kivy.app导入应用
从kivy.uix.boxlayout导入boxlayout
从kivy.lang导入生成器
root=Builder.load\u字符串(“”)
:
复选框:
自定义值:“蓝色”
启用:root.checkbox\u颜色(自身)
复选框:
自定义值:“红色”
启用:root.checkbox\u颜色(自身)
''')
类MyWidget(BoxLayout):
def复选框颜色(自身,实例):
打印(实例.自定义值)
类别MyApp(应用程序):
def生成(自):
返回MyWidget()
MyApp().run()
@Enora更新了它,所以你不需要在ID中循环。self.ids.keys()[self.ids.values().index(instance)
让我很困惑。我正在处理这个问题,但我仍然无法理解。@Enora.keys()
函数是一个python函数,它返回字典的键。{blue:“a”,“red:“b”}
因此您得到(“蓝色”、“红色”)
。然后.values()
返回字典(“a”、“b”)
的值,换句话说就是实例。然后.index(instance)
函数在值中获得实例的索引。索引被传递到self.ids.keys()[index]
,因此它将为您提供“蓝色”
或“红色”
这开始有意义了。我刚刚测试了(更新的)代码,我得到了以下错误:AttributeError:“dict_values”对象没有属性“index”(循环运行良好)@Enora因此在python3中,我们需要将dict_值
和dict_键
转换为list()
函数的列表。同样,您很好:)@Enora更新了它,所以您不需要循环通过id.theself.ids.keys()[self.ids.values().index(实例)
让我很困惑。我正在经历这件事,但我仍然无法理解。@Enora the.keys()
函数是一个python函数,它返回字典的键{“blue”:“a”,“red”:“b”}
所以你得到(“blue”,“red”)
。然后.values()
返回字典的值(“a”,“b”)
换句话说就是实例。然后.index(instance)
函数在值中获取实例的索引。该索引被传递给self.ids.keys()[index]
,因此它将为您提供“蓝色”
或“红色”
,这开始有意义了。我刚刚测试了(更新的)代码,我得到了这个错误:AttributeError:“dict_values”对象没有属性“index”(循环运行良好)@Enora,因此在python3中,我们需要将dict_值
和dict_键
转换为带有list()
函数的列表。你又来了:)