コピペもアンドゥもできず、なにかあってもダイアログすら表示しません。
セーブとロードのみできますが、拡張子は .txt のみ。
ソースここから
## 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 の日本語化ライブラリ japanize_kivy も使っています。世の中便利になっているんですね、作者の方に感謝です。
一応 Linux 上で動作確認しているのですが、環境に合わせてデフォルトのディレクトリパスを書き替えてください。
pathDef = ("/home/")
の内容を変えればOKのハズです。
で、なんでこんなモン作ったのか?ですが、ここ最近しょっちゅうアキバに買い物に行ってまして、行くたびに買い物メモを紙に書いて持って行ってたのです。
いや、スマホで良くね?と思ったのですが、私のスマホ、メモ帳入って無かったのですよ。
で、メモ帳アプリを物色していたら「無料版では広告が…」いや、メモ読むのに広告表示されるってなんやねん、となりまして。
それなら自分で作るかと思って作った…のですが、kivy でアプリ作るのも何年かぶりで10日以上かかりました。そして、作ってから気づいたのですよね、いつぞやのアップデートからアンドロイドって野良アプリから内部ファイルの読み書きできなくなっていなかったっけ?と。
仮に buildozer でコンパイルできたとしても、これアンドロイドでは使えないのかもしれませんね。

0 件のコメント:
コメントを投稿