Code

tiforadacaixa

FileChooser explorar arquivos com kivy

Modulo: kivy.uix.filechooser

O modulo FileChooser providencia varias classes para descrever, mostrar e explorar o sistema de arquivos

Widgets simples:

Aqui temos dois exeplos prontos para uso de widgets que providenciam viasualizações do sistema de arquivos.

Cada um desses mostrar os arquivos e as pastas em diferentes estilos.

O FileChooserListView mostra os nomes dos arquivos e pastas em uma visualização de lista vertical, os arquivos nas pastas podem ser ocutados ou expandidos.










_images/filechooser_list.png

O modulo FileChooserIconView apresenta icones e texto, da esquerda para a direita, envolvendo oque for necessario.

_images/filechooser_icon.png
Ele tambem providencia uma barra de rolagem, seleção e interação basica com o usuario, para mais detalhes veja o modulo FileChooserController.

 Compoosição do widget:

A classe FileChooser adota o design MVC, você pode extender e customiza-lo de acordo com as suas necessidades.

As classes do FileChooser podem ser categorizadads da seguinte forma:
    Models: são representados pelas implementações concretas da classe FileSystemAbstratic, e tambem da FileSystemLocal.
    Views: são representados pelas classes FileChooserListLayout e FileChooserIconLayout. elas são usadas pelo FileChooserListView e pelo FileChooserIconView respectivamente.
    Controllers: são presentados pelas implementações concretas do FileCHooserController, nomeadamante pelas classes FileChooser, FileChooserIconView e FileChooserListView.

Exemplo de uso:
main.py
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.factory import Factory
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup

import os


class LoadDialog(FloatLayout):
    load = ObjectProperty(None)
    cancel = ObjectProperty(None)


class SaveDialog(FloatLayout):
    save = ObjectProperty(None)
    text_input = ObjectProperty(None)
    cancel = ObjectProperty(None)


class Root(FloatLayout):
    loadfile = ObjectProperty(None)
    savefile = ObjectProperty(None)
    text_input = ObjectProperty(None)

    def dismiss_popup(self):
        self._popup.dismiss()

    def show_load(self):
        content = LoadDialog(load=self.load, cancel=self.dismiss_popup)
        self._popup = Popup(title="Load file", content=content,
                            size_hint=(0.9, 0.9))
        self._popup.open()

    def show_save(self):
        content = SaveDialog(save=self.save, cancel=self.dismiss_popup)
        self._popup = Popup(title="Save file", content=content,
                            size_hint=(0.9, 0.9))
        self._popup.open()

    def load(self, path, filename):
        with open(os.path.join(path, filename[0])) as stream:
            self.text_input.text = stream.read()

        self.dismiss_popup()

    def save(self, path, filename):
        with open(os.path.join(path, filename), 'w') as stream:
            stream.write(self.text_input.text)

        self.dismiss_popup()


class Editor(App):
    pass


Factory.register('Root', cls=Root)
Factory.register('LoadDialog', cls=LoadDialog)
Factory.register('SaveDialog', cls=SaveDialog)


if __name__ == '__main__':
    Editor().run() 

editor.kv
#:kivy 1.1.0

Root:
    text_input: text_input

    BoxLayout:
        orientation: 'vertical'
        BoxLayout:
            size_hint_y: None
            height: 30
            Button:
                text: 'Load'
                on_release: root.show_load()
            Button:
                text: 'Save'
                on_release: root.show_save()

        BoxLayout:
            TextInput:
                id: text_input
                text: ''

            RstDocument:
                text: text_input.text
                show_errors: True

<LoadDialog>:
    BoxLayout:
        size: root.size
        pos: root.pos
        orientation: "vertical"
        FileChooserListView:
            id: filechooser

        BoxLayout:
            size_hint_y: None
            height: 30
            Button:
                text: "Cancel"
                on_release: root.cancel()

            Button:
                text: "Load"
                on_release: root.load(filechooser.path, filechooser.selection)

<SaveDialog>:
    text_input: text_input
    BoxLayout:
        size: root.size
        pos: root.pos
        orientation: "vertical"
        FileChooserListView:
            id: filechooser
            on_selection: text_input.text = self.selection and self.selection[0] or ''

        TextInput:
            id: text_input
            size_hint_y: None
            height: 30
            multiline: False

        BoxLayout:
            size_hint_y: None
            height: 30
            Button:
                text: "Cancel"
                on_release: root.cancel()

            Button:
                text: "Save"
                on_release: root.save(filechooser.path, text_input.text) 
 

Postar um comentário

0 Comentários