gpt4 book ai didi

python - 修改后的 kivy 散点小部件不更新转换

转载 作者:太空狗 更新时间:2023-10-30 00:12:57 25 4
gpt4 key购买 nike

我尝试从 Scatter 创建一个 kivy 小部件,它可以自由缩放,但是一旦鼠标按钮被抬起就会回落到最近的缩放级别。

它可以工作,但直到下一次单击才会更新缩放。我想我需要在这里绑定(bind)一些事件,但我对 kivy 很陌生,无法弄清楚。这是我当前的代码:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.scatter import Scatter
from kivy.graphics.transformation import Matrix

ZOOM_LEVELS = [0.25, 0.5, 1, 2, 4]

class PPMap(Scatter):
def __init__(self, **kwargs):
super(PPMap, self).__init__(**kwargs)
self.bind(on_touch_up=self.adjust_zoom)

def adjust_zoom(self, *args):
old_zoom = self.scale
new_zoom = min(ZOOM_LEVELS, key=lambda x:abs(x-old_zoom))
self.set_zoom(new_zoom)

def set_zoom(self, zoom):
self.transform.set(array=[[zoom, 0, 0, 0],
[0, zoom, 0, 0],
[0, 0, zoom, 0],
self.transform.tolist()[3]])

class PPApp(App):
def build(self):
pp_map = PPMap(do_rotation=False, scale_min=ZOOM_LEVELS[0], scale_max=ZOOM_LEVELS[-1])
label = Label(text="Hello!", font_size=300, pos=(0, 0))
pp_map.add_widget(label)
return pp_map

if __name__ == "__main__":
PPApp().run()

最佳答案

self.transform.set( # ...

这里的问题是您修改了现有的 ObjectProperty实例和 Kivy 不知道它发生了变化:

Warning To mark the property as changed, you must reassign a new python object.

您可以这样做,也可以手动发送:

def set_zoom(self, zoom):
self.transform.set(array=[[zoom, 0, 0, 0],
[0, zoom, 0, 0],
[0, 0, zoom, 0],
self.transform.tolist()[3]])
self.property('transform').dispatch(self) # transform has changed

关于python - 修改后的 kivy 散点小部件不更新转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com