перезагрузить текстовую метку kivy python - PullRequest
0 голосов
/ 05 октября 2018

Здравствуйте. Я хочу иметь кнопку, которая изменяет значение (num) на случайное целое число.так что переменная num изменяет глобальное значение labeltext.Проблема, с которой я сталкиваюсь, заключается в том, что я не могу поместить текстовую метку в функцию обратного вызова и не могу перезагрузить переменную num .Как я вижу, текст метки загружается со значением значения num = 0, но он не изменяется так, как я хочу.

Есть ли способ определить функцию, которая изменяет текст метки при нажатие кнопки?

num = 0
array=["lorem","fdw","abcd","icecream","onemore","sword"]
labeltext = array[num]

class word(Widget):

    def callback(self, btn_instance):
        global num
        num = randint(0,5)
        return num

textlabel =Label(text=labeltext,font_size=10)


btnr = Button(text='change the textlabel',pos=(0, 100))


class wordApp(App):

    def build(self):

        gc = word()
        gc.add_widget(btnr)
        global gc
        btnr.bind(on_press=gc.callback)
        gc.add_widget(textlabel)
        return gc


if __name__ == '__main__':
    wordApp().run()

Заранее спасибо. Надеюсь, это поможет и другим, у кого такая же проблема.

1 Ответ

0 голосов
/ 05 октября 2018

Поскольку labeltext обновляется вверху / в начале, вам потребуется обновлять его снова после создания каждого нового случайного целого числа.

Пример

main.py

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.label import Label

from random import randint

num = 0
array = ["lorem", "fdw", "abcd", "icecream", "onemore", "sword"]
labeltext = array[num]


class word(Widget):

    def __init__(self, **kwargs):
        super(word, self).__init__(**kwargs)
        self.textlabel = Label(text=labeltext, font_size=10)
        btnr = Button(text='change the textlabel', pos=(0, 100))
        btnr.bind(on_press=self.callback)

        self.add_widget(btnr)
        self.add_widget(self.textlabel)

    def callback(self, btn_instance):
        global num
        global labeltext
        print("\tnum={0}, labetext={1}".format(num, labeltext))
        num = randint(0, 5)
        labeltext = array[num]
        print("\tnum={0}, labetext={1}".format(num, labeltext))
        self.textlabel.text = labeltext


class wordApp(App):

    def build(self):
        return word()


if __name__ == '__main__':
    wordApp().run()

Выход

Img01 - App Startup Img02 - New labeltext

...