Kivy 矩形源没有更新?

Posted

技术标签:

【中文标题】Kivy 矩形源没有更新?【英文标题】:Kivy Rectangle source doesn't get updated? 【发布时间】:2020-08-04 14:08:11 【问题描述】:

(我已经阅读了很多关于此的其他帖子,但它们似乎对我没有帮助(或者我根本不理解它们))

我有一个函数 Add(),其中调用了另一个函数 Grid(),它创建了一个 Grid.png 文件并将其保存到我的桌面。这个 Add() 函数被多次调用(通过一个按钮),其中还有 Grid() 函数。这是一个小代码sn-p:


    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() 足够好。感谢您的回答!

【问题讨论】:

在添加bgLabel 帮助之前是否在canvas 中插入clear() 命令? @JohnAnderson 不,我试过了。在with self.canvas: 下方添加了一个self.canvas.clear(),但它没有做任何事情 【参考方案1】:

可能图像源正在被 Kivy 的图像加载器缓存,因此您需要通知它更新。尝试from kivy.cache import CacheCache.remove("kv.texture", your_filename)(或省略your_filename 参数以清除整个纹理缓存)。

【讨论】:

我实际上认为这将是现在的解决方案,因为它看起来合乎逻辑,但它仍然不起作用......我很难过。我在 Grid() 调用之前插入了Cache.remove("kv.texture" ) (也导入了 kv.cache),但它仍然不起作用。我还尝试了其他类别,例如“kv.image”或“kv.graphics”。

以上是关于Kivy 矩形源没有更新?的主要内容,如果未能解决你的问题,请参考以下文章

Kivy 矩形重绘,self.pos 和 self.size 为 (0,0)

QML:DropShadow 复制源矩形

删除白色矩形 KivyMD MDExpansionPanel

Kivy:如何使小部件表现得像溢出:隐藏

更改背景画布 kivy

source rectangle是啥意思