【发布时间】:2021-04-09 11:12:17
【问题描述】:
我正在尝试在 Kivy 1.10.1 中制作数独游戏。我有一个带有 81 个文本输入的屏幕,可以在这样的屏幕中模拟板
<NewGame>
GridLayout:
cols: 9
rows: 9
TextInput:
id: "row_0_col_0"
on_text: root.set_value(self)
TextInput:
id: "row_0_col_1"
on_text: root.set_value(self)
....
TextInput:
id: "row_8_col_8"
on_text: root.set_value(self)
我的 gamy.py 是
class NewGame(Screen):
new_board = Board(board_data=None)
def set_value(self, instance):
Logger.info(f"Self.id is {self.id}")
Logger.info(f"Instance.id is {instance.id}")
但是这些打印 Self.id is None Instance.id is None。最终,我想在文本输入标签中存储一些数据,主要是它们代表的行/列,因为我需要与我创建的 Board 类进行交互。我怎样才能得到身份证?或者,也许添加一个自定义属性,表示要在我的 on_text 回调函数中使用的每个标签的行号和列号?
【问题讨论】:
-
我认为将
id: "row_0_col_1"放在我的 kv 文件中,然后将 self 传递给root,set_value(self)是我应该能够传递值的方式。我没有其他任何定义。 -
您不能只访问
id,在这种情况下它不是类属性,或者至少不是您在.kv 文件中设置的属性。 id 收集在分配给ids的字典中,您可以通过self.ids访问它。如果您想找到某个 id,则必须为此编写条件。同样适用于实例 ID。要绕过这个,您可以将custom_value: 'your value'添加到TextInput,然后instance.custom_value可以在您的python 代码中访问它
标签: python python-3.x kivy