【问题标题】:How do you get the instance id from a TextInput in the on_text function?如何从 on_text 函数中的 TextInput 获取实例 ID?
【发布时间】: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


【解决方案1】:

您可以像这样将rowcol 属性添加到TextInputs

<NewGame>
    GridLayout:
        cols: 9
        rows: 9
        TextInput:
            id: row_0_col_0
            row: 0
            col: 0
            on_text: root.set_value(self)
        TextInput:
            id: row_0_col_1
            row: 0
            col: 1
            on_text: root.set_value(self)
        TextInput:
            id: row_8_col_8
            row: 8
            col: 8
            on_text: root.set_value(self)

那么set_value()方法可以是:

def set_value(self, instance):
    id = "row_" + str(instance.row) + "_col_" + str(instance.col)
    print('id =', id)

请注意,id 值通常不会被 "" 包围。

【讨论】:

    猜你喜欢
    • 2010-10-12
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    相关资源
    最近更新 更多