## TextEditor ##
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from kivy.uix.filechooser import FileChooserIconView
from kivy.uix.filechooser import FileChooserListView
import japanize_kivy
import os
from os.path import join,isdir
pathDef = ("/home/")
SUFFIX = (".txt","*.txt")
#class DirectoryChooser(FileChooserListView):
class DirectoryChooser(FileChooserIconView):
def is_dir(self,directory,filename):
return isdir(join(directory,filename))
# [ファイル選択画面へ]
class BtnTransferLoadFile(Button):
def on_release(self):
self.parent.DrawLoadFile()
# [ディレクトリ選択/ファイル名決定画面へ]
class BtnTransferSaveFile(Button):
def on_release(self):
self.parent.DrawSaveFile()
# [ファイル読み込み]親ウィンドウ全削除→ファイルを読み込んで基本画面
class BtnLoadFile(Button):
def on_release(self):
strPath = '\n'.join(self.parent.fc.selection)
if os.path.exists(strPath):
with open(strPath,'r') as f:
self.parent.txEdit.text = f.read()
self.parent.parent.lFile.text=strPath
self.parent.DrawBase()
# [ファイル書き込み]親ウィンドウ全削除→ファイルを書き込んで基本画面
class BtnSaveFile(Button):
def on_release(self):
while self.parent.txFile.text != "":
strPath = self.parent.dc.path+os.sep+self.parent.txFile.text+SUFFIX[0]
with open(strPath,'w') as f:
outputtext = f.write(self.parent.txEdit.text)
self.parent.parent.lFile.text = strPath
break
self.parent.DrawBase()
# [基本画面へ]親ウィンドウ全削除→基本画面
class BtnQuit(Button):
def on_release(self):
self.parent.DrawBase()
# メインフレームの中にあるウィンドウ
class SubDisplay(BoxLayout):
def __init__(self,**kwargs):
super(SubDisplay,self).__init__(**kwargs)
#self.fc=FileChooserListView()
self.fc=FileChooserIconView()
self.fc.size_hint_y=7
self.fc.filters=[SUFFIX[1]]
self.dc=DirectoryChooser()
self.dc.size_hint_y=6
self.dc.filters=[self.dc.is_dir]
self.btQuit=BtnQuit(text='QUIT',size_hint_y=1)
self.txFile =TextInput(text="defaultName",size_hint_y=1,multiline=False)
self.txEdit =TextInput(text="",size_hint_y=4,multiline=True)
# テキストを表示する基本画面
def DrawBase(self):
self.clear_widgets()
self.orientation='vertical'
b1 =BtnTransferLoadFile(text='LoadFile',size_hint_y=1)
b2 =BtnTransferSaveFile(text='SaveFile',size_hint_y=1)
self.add_widget(self.txEdit)
self.add_widget(b1)
self.add_widget(b2)
# ファイルロード画面
def DrawLoadFile(self):
self.clear_widgets()
self.orientation='vertical'
b1=BtnLoadFile(text='LoadFile',size_hint_y=1)
self.fc.path=os.path.dirname(self.parent.lFile.text)
self.add_widget(self.fc)
self.add_widget(b1)
self.add_widget(self.btQuit)
# ファイルセーブ画面
def DrawSaveFile(self):
self.clear_widgets()
self.orientation='vertical'
base = os.path.split(self.parent.lFile.text)
self.txFile.text = os.path.splitext(base[1])[0]
self.dc.path=base[0]
b1=BtnSaveFile(text='SaveFile',size_hint_y=1)
self.add_widget(self.txFile)
self.add_widget(self.dc)
self.add_widget(b1)
self.add_widget(self.btQuit)
# メインフレーム画面初期化にしか使われない
class Display(BoxLayout):
orientation='vertical'
def __init__(self,**kwargs):
super(Display,self).__init__(**kwargs)
self.lFile = Label(text=pathDef,size_hint_y=1)
self.boxSub = SubDisplay(size_hint_y=8)
self.add_widget(self.lFile)
self.add_widget(self.boxSub)
self.boxSub.DrawBase()
class TextEditorApp(App):
def build(self):
layout = Display()
return layout
if __name__=='__main__':
TextEditorApp().run()
それなら自分で作るかと思って作った…のですが、kivy でアプリ作るのも何年かぶりで10日以上かかりました。そして、作ってから気づいたのですよね、いつぞやのアップデートからアンドロイドって野良アプリから内部ファイルの読み書きできなくなっていなかったっけ?と。