Я работаю с двумя файламиPython Kivy: Обратитесь к ярлыку (кнопка) идентификатору (созданный в * .py файла) с помощью команды self.ids
- test.py
- test.kv
содержание test.py заключается в следующем:
import kivy
kivy.require('1.0.0')
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
Builder.load_file("test.kv")
class MainScreen(Screen):
def __init__(self, *args, **kwargs):
super(MainScreen, self).__init__(*args, **kwargs)
def printIds(self):
print self.ids
def printChildren(self):
print self.ids.box.children
for child in self.ids.box.children:
print child.text, child.id
def addButton(self):
self.ids.box.add_widget(Button(text = "newly added Button", id = "test_button_id"))
pass
class MyApp(App):
def __init__(self,*args, **kwargs):
super(MyApp, self).__init__(*args, **kwargs)
def build(self):
app = MainScreen()
return app
if __name__ == '__main__':
MyApp().run()
содержание test.kv является:
<MainScreen>:
BoxLayout:
orientation: "horizontal"
id: box
Label:
text: "test label"
id: test_label_id
Button:
text: "Print Children"
on_release: root.printChildren()
Button:
text: "Print ids"
on_release: root.printIds()
Button:
text: "Add Button"
on_release: root.addButton()
Моя проблема заключается в следующем: Я хочу, чтобы получить доступ к недавно добавленный Button (который будет добавлен при вызове функции AddButton с помощью нажатия на кнопку Add Button) с помощью команды self.ids в файле питона. Но когда я это делаю (т. Е. Нажав кнопки «Идентификация кнопки»), он показывает только идентификаторы, которые я назначил в файле kivy, а именно: box (который является идентификатором BoxLayout) и test_label_id (который является идентификатором тестовой метки).
Я думаю неправильно? Я имею в виду, если я добавлю кнопку в файл python с командой self.ids.box.add_widged(Button(text="...", id="..."))
, она должна быть видимой с помощью команды self.ids
, правильно?
Я также могу проверить это как-то в другом направлении: если я распечатаю все дети boxlayout
и возьму их, например. текст и идентификатор с командой child.text
или child.id
отображает текст и идентификатор недавно добавленной кнопки, а также текст других кнопок/ярлыков, но не идентификаторы, которые я назначил в файле kivy (в частности: отображает None для них).
Я делаю что-то ужасно неправильно?
спасибо за ваш быстрый ответ! Я попытался адаптировать свой код, чтобы включить словарь, как вам было предложено, но при выполнении: ТипError: объект 'kivy.properties.DictProperty' не поддерживает назначение элемента – klexx
@klexx oh, riiight, переместите 'DictProperty' до уровня класса (удалите' self.' и под 'class MyApp ...'), тогда он должен работать. Плохая ошибка, извините ^^ Проверьте изменение. – KeyWeeUsr
ОК он компилируется сейчас.Еще раз спасибо :) Я пытаюсь выяснить, смогу ли я решить свою проблему с этим. Я, вероятно, вернусь к этому ... :) – klexx