Источник Kivy Rectangle не обновляется? - PullRequest
0 голосов
/ 21 апреля 2020

(я уже читал много других постов по этому поводу, но они, кажется, не помогают мне (или я просто не понимаю их))

У меня есть функция Add (), в которой другая функция Вызывается Grid (), который создает файл Grid.png и сохраняет его на моем рабочем столе. Эта функция Add () вызывается несколько раз (с помощью кнопки), а вместе с ней и функция Grid (). Вот небольшой фрагмент кода:


    Width = 700
    Height = 700


    def __init__(self,**kwargs):
        super(Drw, self).__init__(**kwargs)
        self.CellCount = 1
        time.sleep(0.5)
        self.cellAdd= int(input("\nCells to add: "))
        self.bg = ""
        with self.canvas:


            self.add = Button(text = "add", font_size =40, pos = (700,300))
            self.sub = Button(text="sub", font_size=40, pos=(700, 400))


            self.add.bind(on_press = self.Add)
            self.sub.bind(on_press= self.Sub)

            self.add_widget(self.sub)
            self.add_widget(self.add)


    def Add(self, instance):
        self.CellCount += self.cellAdd
        Grid(self.CellCount, self.Width, self.Height)


        with self.canvas:
            self.bg = Rectangle(source= r"C:\Users\Max\Desktop\Grid.png", pos=(0,0), size= (self.Width, self.Height))
            self.L = Label(text=str(self.CellCount)+" columns", pos=(500, 300))

В первый раз, когда я нажимаю кнопку «Добавить», он делает то, что должен, поэтому вызывается Add () и, в свою очередь, вызывается Grid (). и создает новое изображение на моем рабочем столе. Затем создается «bg» (фон) и изображение отображается правильно. Это работает только 1 раз, однако. После этого, когда я продолжаю нажимать кнопку «Добавить», ничего не происходит, даже несмотря на то, что файл Grid.png меняется на моем рабочем столе каждый раз, когда я нажимаю «Добавить». Изображение просто не обновляется как-то. Путь всегда остается неизменным, поэтому я не понимаю, почему он не меняет изображение на новое?

Я уже пытался вручную обновить источник с помощью

self.bg.source = r"C:\Users\Max\Desktop\Grid.png"

но это ничего не делает. Я довольно новичок в Kivy, поэтому я прошу прощения, если это часто спрашивают.

Спасибо за чтение!

РЕДАКТИРОВАТЬ Я исправил это так:

    def Add(self, instance):

        self.CellCount += self.cellAdd
        Grid(self.CellCount, self.Width, self.Height)

        with self.canvas:
            self.canvas.clear()
            self.bg =Image(source= r"C:\Users\Max\Desktop\Grid.png", pos=(0,0), size= (self.Width, self.Height))
            self.bg.reload()
        self.L = Label(text=str(self.CellCount)+" columns", pos=(500, 300)) 

Я до сих пор не знаю, почему Cache.remove () не работает, как мне кажется логичным, но по крайней мере. reload () работает достаточно хорошо. Спасибо за ваши ответы!

1 Ответ

0 голосов
/ 21 апреля 2020

Возможно, источник изображения кэшируется загрузчиком изображений Kivy, поэтому вам необходимо сообщить ему об обновлении. Попробуйте from kivy.cache import Cache и Cache.remove("kv.texture", your_filename) (или пропустите аргумент your_filename, чтобы очистить весь кэш текстур).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...