python - 可以在python中使用循环来选择kivy id吗?

标签 python loops kivy

您好,我可以使用循环选择多个 kivy id 吗?假设我有 3 个 id(一、二、三) 我从数据库中选择 id,例如 c 是 kivy 小部件的 id。

kvids=0
while kvids < 3
    c=select 'kivy id'#pseudocode
    self.ids.c.text='not work'

有可能使用这样的东西吗?或者对于类似的事情还有其他简单的解决方案吗?我需要从数据库中选择一些信息并将其绑定(bind)到小部件。我对此一无所知。 千伏:

Button:
    id:one
Button:
    id:two
Button:
    id:three

我没有粘贴所有代码,因为无论代码看起来如何,我只需要解决方案。

最佳答案

是的,这是可以做到的。详情请参阅下面的示例。

当你的 kv 文件被解析时,kivy 会收集所有用 id 标记的小部件,并将它们放置在 self.ids 字典类型属性中。这意味着您还可以迭代这些小部件并访问它们字典样式:

for key, val in self.ids.items():
    print("key={0}, val={1}".format(key, val))

self.ids['one'].text = "Button 1"

self.ids.two.text = 'Button 2'

示例

main.py
import sqlite3

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout


class DemoKivyIDsDB(BoxLayout):
    def __init__(self, **kwargs):
        super(DemoKivyIDsDB, self).__init__(**kwargs)
        self.set_widgets_text()

    def set_widgets_text(self):
        connection = sqlite3.connect("kivy.db")
        cursor = connection.cursor()

        cursor.execute("SELECT widget_id FROM kivyids")
        print("fetchall:")
        result = cursor.fetchall()
        for r in result:
            print(r)
            self.ids[r[0]].text = "not work"


class TestApp(App):
    def build(self):
        return DemoKivyIDsDB()


if __name__ == "__main__":
    TestApp().run()

测试.kv

#:kivy 1.10.0

<DemoKivyIDsDB>:
    Button:
        id: one
    Button:
        id: two
    Button:
        id: three

KivyIDsDB.py
import sqlite3

connection = sqlite3.connect("kivy.db")

cursor = connection.cursor()

# delete
# cursor.execute("""DROP TABLE kivyids;""")

sql_command = """
CREATE TABLE kivyids (
id INTEGER PRIMARY KEY,
widget_id VARCHAR(20),
widget_text VARCHAR(30));
"""

# create table
cursor.execute(sql_command)

sql_command = """
INSERT INTO kivyids (id, widget_id, widget_text)
VALUES (NULL, 'one', 'Button 1');
"""

cursor.execute(sql_command)

sql_command = """
INSERT INTO kivyids (id, widget_id, widget_text)
VALUES (NULL, 'two', 'Button 2');
"""

cursor.execute(sql_command)

sql_command = """
INSERT INTO kivyids (id, widget_id, widget_text)
VALUES (NULL, 'three', 'Button 3');
"""

cursor.execute(sql_command)

connection.commit()

connection.close()

输出

enter image description here

关于python - 可以在python中使用循环来选择kivy id吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46813393/

相关文章:

PHP在多个循环中获取总数

python - 对于从文件对话框加载图像有什么建议吗?

python - 了解 openpyxl 模块中 Worksheet 的追加方法如何工作

python - ValueError : setting an array element with a sequence. 决策树

python - 查找相关对象并显示关系

java - 如何标量乘数组

python - 覆盖 pytest 参数化函数名称

javascript - break 语句不会中断循环

python - 将文本渲染到 kivy Canvas

android - Kivy正确设置自己的图标