Я использую 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: вы также можете изменить имя шрифта, если у вас его нет.