Как правильно назначить текст метки Kivy из файла Python? - PullRequest
0 голосов
/ 05 августа 2020

Я новичок в Kivy и Python, поэтому приношу извинения за любую явную ошибку.

Я пытаюсь создать домашний экран, на котором отображается имя, использованное для входа в систему на предыдущем экране. Ниже приведены фрагменты кода:

Мой основной класс приложения;

class ProDuck(App):  
    logged_in_user = StringProperty()  
    print(logged_in_user)  
    def build(self):  
        self.icon = "LogoIcon.png"  
        GUI = Builder.load_file("GUI.kv")  
        return GUI  

(Правильно отформатирован с отступом)

Часть логина, которая изменяет StringProperty, которая внутри другого класс экрана. Logging_in_user находится из self.username.text в этом классе экрана;

    if attempt == target_pass_hash[0]:
        print("Login successful!")
        print(logging_in_user)
        ProDuck.logged_in_user = logging_in_user
        print("New variable = " + ProDuck.logged_in_user)

Соответствующая часть файла .kv;

GridLayout:  
  
    Label:  
        id: nametag  
        text: app.logged_in_user  #<---  
        color: "grey"  

Приложение запускается и выводит правильные переменные, однако отображается пустая метка. Я действительно не уверен, почему метка не показывает никакого текста, я неправильно назначаю StringProperty в части входа в систему? Ценю любую помощь :)

1 Ответ

0 голосов
/ 05 августа 2020

Выражение ProDuck.logged_in_user не является правильным способом доступа к Property. Вам нужно ссылаться на него через экземпляр ProDuck. Один из способов сделать это - использовать App.get_running_app().logged_in_user. Таким образом, ваш кодовый блок может быть:

if attempt == target_pass_hash[0]:
    print("Login successful!")
    print(logging_in_user)
    App.get_running_app().logged_in_user = logging_in_user
    print("New variable = " + App.get_running_app().logged_in_user)
...