有没有办法放大桌面kivy应用程序上的图像(例如用鼠标滚轮缩放)?它似乎在这里讨论:https://github.com/kivy/kivy/issues/3563但我不知道是否有一个解决方案。
我在我的kivy应用程序中开始使用静态图像。我想添加缩放/平移到图像的功能。我不希望更改图像框架的实际尺寸,只需添加缩放/平移功能,就像您可能期望与谷歌地图进行交互一样。
可能的编程方向
根据我的阅读,我应该使用Scatter(?),我发现我可以手动设置Scatter比例来调整图像的大小。
我最初的想法是,我将不得不添加一个带滚动视图的单独小部件来包含散布布局,这将使图像框保持一致的大小。然后我需要添加一个动态更改比例值的事件。
问题
on_motion
事件似乎很有希望。我的应用可以使用滑块更新值,但是当我尝试使用on_motion,
的类似方法时,我会收到AttributeError: motion
错误我正在努力创建小部件。大多数文档似乎在python文件中使用.add_widget(...)
。是否可以从kv文件中执行此操作?我想这个过程类似于屏幕和屏幕管理器,但我很难找到一种有效的方法。
有更直接的方式吗?
有没有办法在我的kv文件中使用on_motion
类型事件来使用鼠标滚轮调整此值?
我给出了一个关于我的kivy应用程序结构的淡化示例 - 以及我尝试添加Scatter的内容。我想我需要将它放入它自己的小部件中以保持图像大小相同?
玩具示例
import kivy
from kivy.lang import Builder
from kivy.core.window import Window
kivy.require('1.1.0')
from kivy.app import App
presentation = Builder.load_file("scatter.kv")
class TestApp(App):
def build(self):
Window.clearcolor = (1, 1, 1, 1)
return presentation
# def foo():
# print("You've reached foo")
if __name__ == '__main__':
TestApp().run()
和
#:kivy 1.10.0
GridLayout:
cols: 2
Scatter:
scale: 5
# on_motion: root.foo()
Image :
source: 'foo.png'
allow_stretch: True
keep_ratio: True
Button:
text: 'Hello World'
有点相关:
答案 0 :(得分:4)
为了实现我的目标,我使用kivy python3 detect mousewheel中的信息组合,如ikolim所指出的,以及此处给出的代码:https://github.com/kivy/kivy/wiki/Draggable-Scalable-Button
为了简短回答,重要的代码归结为:
next_friday=04MAY2018 following_friday=11MAY2018
布局略有不同,我更改了按钮上的文本,但我的代码的功能可以在以下gif中看到:
对于任何想要看到我的整个玩具项目都适合自己的目的的人来说,整个代码都在我的github上:https://github.com/melissadale/Learning-Kivy/tree/master/ZoomPanning
答案 1 :(得分:1)
@mdoc-2011 的 other answer 有一个问题,它没有锚定在鼠标指针上,这意味着使用起来很烦人,因为内容会滚动很多。这可以通过不使用 .scale
属性而是直接调用 apply_transform
来解决:
if touch.is_mouse_scrolling:
factor = None
if touch.button == 'scrolldown':
if self.scale < self.scale_max:
factor = 1.1
elif touch.button == 'scrollup':
if self.scale > self.scale_min:
factor = 1 / 1.1
if factor is not None:
self.apply_transform(Matrix().scale(factor, factor, factor),
anchor=touch.pos)
此版本还使用.scale_(min/max)
属性,而不是1.1
和0.8
使用1/1.1
,这将使滚动滚动更直观。