Kivy使用篇11

Kivy使用篇之图片查看查看器

  1. 屏幕管理Screen ScreenManager的使用
  2. 文件管理FileChooser FileSystemLocal
  3. 图片显示Image AsyncImage的使用

屏幕管理
定义两个屏幕,图片选择和图片查看

class ImageViewApp(App):
    def build(self):
        sm = ScreenManager()
        selection_screen = ImageSelection(name='selection')  # 定义一个图片选择屏幕
        view_screen = ImageView(name='view')  # 定义一个图片查看屏幕
        sm.add_widget(selection_screen)  # 添加屏幕至屏幕管理
        sm.add_widget(view_screen)
        sm.current = 'selection'  # 设置当前屏幕
        return sm

使用FileChooser选择要显示的图片
FileChooser可以用图片方式,或列表方式来显示文件
简单使用示例如下:

:
    file_chooser: fc
    BoxLayout:
        orientation: 'vertical'
        # 选择文件显示样式 列表/图标
        BoxLayout:
            size_hint_y: None
            height: sp(52)
            Button:
                text: 'Icon View'
                on_press: fc.view_mode = 'icon'  # 图标方式
            Button:
                text: 'List View'
                on_press: fc.view_mode = 'list'  # 列表方式
        Label:
            size_hint_y: None
            height: sp(52)
            text: fc.path
        FileChooser:
            id: fc
            path: '/sdcard/DCIM'  # android 照片存储目录
            rootpath: '/sdcard'  # 固定根目录为sdcard
            filters: ['*.jpg', '*.png',  '*.gif']  # 文件名后缀过滤
            on_submit: root.view_image()
            FileChooserIconLayout
            FileChooserListLayout

运行示例如下:
Kivy使用篇11_第1张图片
Kivy使用篇11_第2张图片
path: '/sdcard/DCIM' 用来设置文件选择器的路径
rootpath: '/sdcard' 用来设置文件选择器的根目录,即不会再显示根目录的父目录文件
filters: ['*.jpg', '*.png', '*.gif'] 仅显示后缀为jpg png gif的文件
on_submit: root.view_image() 当双击文件时,触发。处理程序如下:

class ImageSelection(Screen):
    """图片选择器"""
    file_chooser = ObjectProperty(None)  # 文件选择

    def view_image(self):
        """显示图片"""
        self.manager.get_screen('view').set_image(self.file_chooser.selection[0])
        self.manager.transition.direction = 'left'  # 屏幕滑动方向
        self.manager.current = 'view'

self.manager指向屏幕的管理程序ScreenManager
图片查看程序
显示图片查看屏幕时,设置要显示的图片,并把改图片所在目录里的所有图片,添加至一个列表中,程序实现如下:

    def set_image(self, p):
        """设置图片"""
        self.image.source = p
        # 添加图片至列表
        self.list.clear()
        idx = 0
        for f in self.manager.get_screen('selection').file_chooser.files : # 获取当前图片路径
            if not FileSystemLocal().is_dir(f):
                if f == p:  # 记录当前图片在文件中的位置
                    self.current = idx
                self.list.append(f)
                idx += 1

self.manager.get_screen('selection').file_chooser.files 用来获取当前文件选择器目录下的所有文件,包括文件目录。
图片显示控件为ImageAsyncImage,该程序使用AsyncImage显示图片:

        AsyncImage:
            id: image
            allow_stretch: True  # 允许缩放
            keep_data: True  # 保留图片数据
            anim_delay: 0.1  # 仅对gif格式图片有效
            source: ''

AsyncImage的源可以是一个网络链接地址

在查看屏幕,添加两个按钮,用来查看当前图片的前一图片和后一张图片:

        BoxLayout:
            size_hint_y: None
            height: sp(52)
            Button:
                text: 'Prev Image'
                on_press: root.show_prev()
            Button:
                text: 'Next Image'
                on_press: root.show_next()

添加一个返回按钮,返回文件查看器:

		BoxLayout:
            size_hint_y: None
            height: sp(52)
            Button:
                text: 'Return Selection'
                on_press:
                    root.manager.transition.direction = 'right'  # 屏幕滑动方向
                    root.manager.current = 'selection'

查看器运行示例如下:
Kivy使用篇11_第3张图片
源码地址:https://github.com/babylco0/python3_examples/tree/master/ImageView

你可能感兴趣的:(kivy)