Как ограничить движение одной папкой в ​​FileChooser? - PullRequest
0 голосов
/ 23 декабря 2018

Я использую python и Kivy для создания простого текстового редактора, почти как VSCode.Я натолкнулся на удивительный виджет FileChooser (точнее, FileChooserListView) и использовал его для навигации по файлам.

Однако я хочу ограничить перемещение одним файлом проекта, как в VSCode, чтобы обеспечить более безопасную работу.

Я хочу сделать это, сначала выполнив команду терминала (как в VSCode: code имя_папки), но так как это другая тема, решил просто использовать строку main_path (в коде kv, который вы можете редактировать), к которомупрограмма должна ограничиться.Я добавлю функциональность терминала, чтобы выбрать пути позже (если возможно, руководства по этому вопросу будут очень полезны).

Я действительно не знаю много о Kivy, и документация довольно запутанная.Поэтому я не знал, что все попробовать.

#######KV FILE name: gridlayout.kv#######


#:import isdir kivytest.GridLayoutApp
#:set main_path '~/Projects'
<Label>:
    font_name:'Fura Code Retina Nerd Font Complete.otf'
    font_size:'18sp'
<GridLayout>:
    cols:3
    rows:1
    Label:
        canvas.before:
            Color:
                rgb:0.2,0.2,0.2
            Rectangle:
                pos: self.pos
                size: self.size
        size_hint_x: None
        width: 50
    Splitter:
        id:splitter
        sizable_from: 'right'
        min_size: 170
        max_size: 400
        on_release: app.ask_update()
        width:335
        FileChooserListView:
            id:filechooser
            path: main_path
            size_hint_x: None
            width: splitter.width-splitter.strip_size
            font_name: 'Fura Code Retina Nerd Font Complete.otf'
            font_size: '1sp'
            canvas.before:
                Color:
                    rgb: .17,.19,.19
                Rectangle:
                    pos: self.pos
                    size: self.size
            on_selection: root.select(*args)
            background_color:(0.17,0.19,0.17,1)


    ScrollView:
        id:scroller
        TextInput:
            id:ti
            size_hint: (None, None)
            width: scroller.width
            height:max(self.minimum_height, scroller.height)
            font_size: '18sp'
            cursor_color: [255,255,255,1]
            background_color: (.17, .18, .17, 1)
            foreground_color:[255,255,255,1]
            font_name: 'Fura Code Retina Nerd Font Complete.otf'
            selection_color: (1,1,1,0.125)
            on_text: app.text_changed()


#######Python Code#######


import os
from pathlib import Path
import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
class GridLayoutApp(App):
    file = ''
    dir = ''
    text = ''
    def build(self):
        self.grid=GridLayout()
        return self.grid
    def text_changed(self, *args):
        width_calc = self.grid.ids.scroller.width
        for line_label in self.grid.ids.ti._lines_labels:
            width_calc = max(width_calc, line_label.width + 20)
        self.grid.ids.ti.width = width_calc
    def ask_update(self, *args):
        width_calc = self.grid.ids.splitter.width
        self.grid.ids.filechooser.width = width_calc- self.grid.ids.splitter.strip_size

if __name__ == "__main__":
    glApp = GridLayoutApp()
    glApp.run()

Ожидаемые результаты: ограничение навигации по файлам за пределами выбранной папки (main_path).
EDIT: вы также можете изменить имя шрифта, если у вас его нет.

...