我嘗試從Scatter創建一個可自由縮放的kivy控件,但是一旦鼠標按鈕被擡起,就會回落到最近的縮放級別。修改後的kivy分散控件不會更新轉換
它的工作原理,但它不會更新縮放,直到下一次點擊。我想我需要在這裏綁定一些事件,但我對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()
目前,我通過「手勢」縮放:右擊把第一根指頭,然後用鼠標左鍵拖動(在Linux上) –
這正是它在Linux上所做的,但我希望它在釋放鼠標按鈕後將縮放比例更改爲我的固定縮放級別之一(請參閱我的問題的第一句) –
在我的Ubuntu上,此代碼可以工作,它不能更新,實際上它可能是一個錯誤 – MatEhickey