2015-11-03 5 views
0

Я довольно долго пытался выяснить, как обновлять метки с помощью python/kivy, я могу установить метку, но я не могу ее обновить после того, как она была установлена. Это мой питон код:Обновление/изменение ярлыков Kivy

class MenuScreen(Screen): 
    status = StringProperty() 
    status = 'Text_Status' # This works. 
    def updatelabel(self,): 
     # When I call this function, this does not update the label. 
     self.status='Text_status no.2' 

И это мой .kv файл

Label: 
    id: status 
    font_size: 12 
    text: root.status 
    size_hint: 0.25, 0.05 
    color: 1,1,1,1 
    pos_hint: {"x": 0.75, 'y':0.95} 

Я пытался выяснить это в течение веков, и я не могу показаться, чтобы получить его.

Использование kivy 1.9.0

Любая помощь будет принята с благодарностью.

+0

Попробуйте изменить 'self.status' на' MenuScreen.status', так как объявление 'status = 'Text_Status' означает, что переменная не является переменной экземпляра. Также попробуйте прочитать некоторые базовые учебники о [oo на python] (http://www.diveintopython.net/object_oriented_framework/index.html) – vyscond

+0

@vyscond Я не знаю - вот как я делаю это свой код и, похоже, работает для меня! Интересно, запутанно ли это, что идентификатор метки совпадает с именем StringProperty. – elParaguayo

+0

MenuScreen.status не имеет никакого значения, никаких ошибок, но никакой разницы. http://i.imgur.com/hXt1d7k.png Это то, что у меня есть до сих пор. Он пытается обновить ярлык, когда я нажимаю кнопку. – AB49K

ответ

1

я, наконец, наткнулся на ответ:

status = StringProperty() 
def __init__(self, **kwargs): 
    super(MenuScreen, self).__init__(**kwargs) 
    self.status='Text_status' 
def updatelabel(self): 
    print("Trying to update label") 
    self.status='Text_status no.2' # When I call this function, this does not update the label. 

Этот теперь работает отлично. Мне не хватало функции def __init__.

+0

Проблема заключалась в том, что ваш исходный код заменил StringProperty только строкой, которая не имеет поведения событий или чего-то еще. Использование '__init__' (или другого метода) необходимо, потому что это обновляет переменную для экземпляра, а не заменяет переменную класса. – inclement

+0

Мне любопытно. Вам нужен '__init__', или вы можете просто сделать' status = StringProperty («Text_status») ', а затем просто использовать метод« updatelabel », как и раньше? – elParaguayo

Смежные вопросы