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() 足够好。感谢您的回答!
【问题讨论】:
在添加bg
和Label
帮助之前是否在canvas
中插入clear()
命令?
@JohnAnderson 不,我试过了。在with self.canvas:
下方添加了一个self.canvas.clear()
,但它没有做任何事情
【参考方案1】:
可能图像源正在被 Kivy 的图像加载器缓存,因此您需要通知它更新。尝试from kivy.cache import Cache
和Cache.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)