使用kivy 版本2.1.0 来写一个bmp图片展示窗(允许滚动条上下滚动查看大图片),另点击展示窗中的图片的显示坐标demo
时间: 2023-05-26 08:04:57 浏览: 117
首先,需要导入kivy库和os库:
```python
import kivy
from kivy.app import App
from kivy.uix.image import Image
from kivy.uix.scrollview import ScrollView
from kivy.core.window import Window
import os
```
在Kivy App中创建一个ScrollView和Image组件,并将Image组件作为ScrollView组件的子组件。
```Python
class BMPviewer(App):
def build(self):
#获取当前路径
cur_path = os.path.dirname(os.path.abspath(__file__))
#读取bmp图片
bmp_file = os.path.join(cur_path, "sample.bmp")
bmp_image = Image(source=bmp_file)
#创建ScrollView
scrollview = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
scrollview.add_widget(bmp_image)
return scrollview
```
为了实现点击图片获取坐标的功能,我们需要在Image组件上添加OnTouchDown事件并获取点击的坐标,然后使用Kivy的底层事件管理器实现坐标的转换。
```Python
class BMPviewer(App):
def build(self):
#获取当前路径
cur_path = os.path.dirname(os.path.abspath(__file__))
#读取bmp图片
bmp_file = os.path.join(cur_path, "sample.bmp")
bmp_image = Image(source=bmp_file)
#创建ScrollView
scrollview = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
scrollview.add_widget(bmp_image)
#为Image组件添加OnTouchDown事件
bmp_image.bind(on_touch_down=self.on_img_touch_down)
return scrollview
def on_img_touch_down(self, instance, touch):
#获取点击位置相对于Image组件的坐标
x = touch.pos[0] - instance.to_parent(*instance.pos)[0] - instance.width / 2
y = touch.pos[1] - instance.to_parent(*instance.pos)[1] - instance.height / 2
#输出点击位置的坐标
print("Clicked position: ({}, {})".format(x, y))
```
现在我们可以运行BMPviewer并查看结果了。当我们在BMP图片上滑动时,会显示滚动条并允许我们上下滚动查看整个图片。另外,当我们单击BMP图片时,会显示我们单击的坐标。
下面是完整的代码:
```Python
import kivy
from kivy.app import App
from kivy.uix.image import Image
from kivy.uix.scrollview import ScrollView
from kivy.core.window import Window
import os
class BMPviewer(App):
def build(self):
#获取当前路径
cur_path = os.path.dirname(os.path.abspath(__file__))
#读取bmp图片
bmp_file = os.path.join(cur_path, "sample.bmp")
bmp_image = Image(source=bmp_file)
#创建ScrollView
scrollview = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
scrollview.add_widget(bmp_image)
#为Image组件添加OnTouchDown事件
bmp_image.bind(on_touch_down=self.on_img_touch_down)
return scrollview
def on_img_touch_down(self, instance, touch):
#获取点击位置相对于Image组件的坐标
x = touch.pos[0] - instance.to_parent(*instance.pos)[0] - instance.width / 2
y = touch.pos[1] - instance.to_parent(*instance.pos)[1] - instance.height / 2
#输出点击位置的坐标
print("Clicked position: ({}, {})".format(x, y))
if __name__ == '__main__':
BMPviewer().run()
```
阅读全文