PyS60:Symbian用メモ帳の作成方法の物語

まえがき



こんにちは、habrayuzery!

ほとんどの場合、私はPCから離れているので、その機能のほとんどは常にSymbian 9.4ベースのスマートフォンに割り当てられているデバイスに割り当てられています。 マルチメディア機能に加えて、テキストメモを作成したり、ブログの記事のアウトラインを作成したりする必要が非常に頻繁にあります。 また、Nokia 5530XMがマルチメディア機能を強力に処理する場合、テキストの操作は私にとって便利なソフトウェアが不足しているため複雑です-私の気難しい態度は、インターネットで見つけてデバイスでテストできるソフトウェア製品を認識しません。 私には最も単純なノートブックが必要でしたが、私にとっては不必要な機能を搭載したテキストエディタに出くわしました。 そして、I死者の救いはdr死者自身の仕事であると思い出したとき、私は自分のニーズを満たす必要があることに気づきました。





救命浮き輪



正直なところ、私の趣味はモバイルサイト向けのデザインであるため、プログラミングとは直接的な関係はありませんが、同時にプログラミングは私には馴染みがありません。大学にいたとき、私はクラシックに慣れる(かなり成功する)機会を得ました- C / C ++とDelphiで、したがって、絶望から悲しいため息の段階を過ぎて、開発用の言語を選択し始めました。

特に選択はありませんでした。



Qt / C ++で快適に書くためには、たくさんのものをダウンロードしてインストールする必要があります。

mShellは、パスカルのような珍しい言語です。 通訳をインストールした後、SMSを介して無料の登録手順を実行する必要がありますが、これは望ましくありません。

しかし、Pythonには興味がありました。これまでに遭遇したことはなく、プログラミングの分野で新しいことを知るのは興味深いことでした。



仕事の準備



そのため、Pythonを選択しました。 さて、最初のプログラムを書き始めるには、このPython'omでスマートフォンを作成する必要があります。Python1.4.5に加えて、megaPyModulePack 2.0.1とPythonScriptShellのモジュールセットをダウンロードしてインストールしました。

プログラムを書くには、テキストエディターが必要です。歯を食いしばって、私はスマホに好きではないLightTextソフトウェアをインストールしなければなりませんでした。

さて、書かれたスクリプトをPythonフォルダーに移動するには、古き良きX-ploreファイルマネージャーを選択しました。

すべての人がダウンロードし、すべてがインストールされ、すべてが機能します-Pythonはコンソールで私たちに会います:

画像



何が欲しい?



プログラムに何が欲しいですか? 最小の部分は、UTF-8で入力したテキストを作成および保存する機能です。 ここから、プログラムのタイプについての結論を導き出します。大きな入力フィールド、いくつかの項目のメニュー(新規ドキュメント、保存、情報)、および終了ボタンです。 それだけです



知識は力です



そして、この力がなければ、ここでは何もすることができません。 私は4つのソースから力を引き出しました。

-Pankaj NathaniとBogdan Galiceanuによる本“ Python on Symbian”

-mobi.ruのAlbert Gazetdinovによる記事

-wikibuxのPython 2.6チュートリアル

-フォーラムallnokia.ru



すぐに



背景情報の読み方や、このプロセスが私にもたらした感情については書きませんが、これは小説ではないので、すぐに創造のプロセスに移ります。

最初に、プログラムが偉大で強力なロシア語と友達になるのを手伝います:



ru=lambda x: x.decode('utf-8')
      
      







さて、プログラムが未知の文字で私たちを混乱させないように、ru()関数を使用するだけで十分です。

次のステップは、必要なモジュールを接続することです:



したがって、接続します。



 import appuifw, os, e32
      
      







これで、将来のプログラムを何らかの形で呼び出すのは論理的です。 メガファンクショナルによって違いはないので、それに対応する名前-P(rimitive)Padを付けます。

プログラムに名前を付けましょう:



 appuifw.app.title = u"PPad"
      
      







その瞬間から、プログラムはその名前を見つけました。 「Python」という碑文の代わりに、ウィンドウの上部に表示されます。 しかし、私たちは彼に会わないので、今からその理由を説明します。このノートブックでは大きな入力フィールドを見たいと既に言っています。 appuifwモジュールを使用すると、プログラムボディサイズを次の3つから選択できます。



私たちにとって最も適した選択肢は大きいと思いました:



 appuifw.app.screen = "large"
      
      







画面のサイズを決定したら、メモ帳の作成に向けて別の手順を実行することを提案します。テキストの入力/出力/編集ができるように、ドキュメントの本文をTextオブジェクトとして定義します。



 appuifw.app.body = t = appuifw.Text()
      
      







変数tを介して、入力されたテキストと、テキストの色を変更する要求など、他のいくつかの要求についてこのオブジェクトにアクセスできます。 デフォルトでは、テキストの色は緑です。これは私を満足させるものではありません-そのような色では、私はテキストを扱うのがあまり快適ではないので、緑よりも古典的な黒を好む:



 t.color = 0x000000
      
      







プログラムが起動すると、空のテキストフィールドが表示されます。 そこで少し挨拶をしましょう。



 t.add(ru("  PPad -          ."))
      
      







この例では、プログラムの最初の行でru()関数が作成された理由とその使用方法を確認できます。



さて、おそらく、それはプログラムメニューを思い起こさせるために残っています。 スクリーンショットでは、「関数」(appuifw.app.menu)と「終了」(appuifw.app.exit_key_handler)の2つのキーを確認できます。 「終了」をクリックすると、プログラムは即座に閉じますが、これは完全に正しいわけではありません。誤って押すと、入力されたすべてのデータが失われ、許可されないためです。 そこで、そこから微調整を開始します。それに関数を割り当て(終了と呼びましょう)、ユーザーに許可を求めます。



 appuifw.app.exit_key_handler = quit
      
      







さて、関数自体を書きます:



 def quit(): if appuifw.query(ru(" ?"), "query") == 1: appuifw.app.set_exit()
      
      







appuifw.query(「ユーザーへの質問」、「タイプ」)-データを入力するためのウィンドウ。 テキスト(テキストの入力用)、コード(パスワードの入力用)、数字(数字の入力用)、フロート(実数の入力用)、日付(日付の入力用)、時間(時間の入力用)、およびクエリ(回答オプション「OK」または「キャンセル」で質問を表示するには)。 この場合、ユーザーが終了するかどうか、ユーザーが本当に終了するかどうかを確認し、[OK]をクリックすると、関数は1を返します。



プログラムを終了することを決めた後、メニューを割り当てる「機能」キーを「櫛」にします。 メニューは3つの項目で構成されます-新規/クリア、UTF-8に保存、および情報。 各アイテムは、タプル(「アイテム名」、実行される機能)の形式で指定されます。 メニューを作成します。



 appuifw.app.menu = [(ru("/"), ClearDoc), (ru("  UTF-8"), SaveDoc), (ru(""), AboutSoft)]
      
      







次に、ClearDoc、SaveDoc、AboutSoftの3つの関数を作成する必要があります。 単純なものから複雑なものへと進みます。つまり、AboutSoft関数から始めます。



 def AboutSoft(): appuifw.note(ru(" :\nEvil_Penguin  \nJOIN_ME    "), "info")
      
      







appuifw.note関数は、この関数で確認したいテキストを含むウィンドウを数秒間表示します。



新しいドキュメントを作成する機能は、不名誉にも簡単です-それから必要なのは、画面をクリアすることだけです。 変数tはこれに役立ちます。



 def ClearDoc(): if appuifw.query(ru("  ?"), "query") == 1: t.clear() t.set_pos(0)
      
      







すでにappuifw.query関数を満たしました-その助けを借りて、ユーザーに新しいドキュメントを作成する意思があるかどうかを再度尋ね、もしあれば、フィールドをクリアし(t.clear())、カーソルを元の位置に設定して正確にします( t.set_pos(0))。



最後の機能は残ります-ドキュメントを保存する機能。 関数は複雑ではありませんが、より面白くするために、いくつかの条件で機能を調整します。

それでは、関数アルゴリズムとは何ですか?

1.ユーザーに保存したファイルの名前を尋ねます

2.ファイルがスマートフォンのメモリにあるかどうかを確認します

3.そのようなファイルが存在しない場合、すべてをファイルに安全に書き込みます

4.ファイルが存在する場合、ユーザーにファイルを置き換えるかどうかを尋ねます。 ユーザーがファイルの置き換えを希望する場合は、それに応じてすべてをファイルに書き込みます。それ以外の場合は、ファイルが保存されないことを通知します。

5.リクエスト(項目1)でユーザーが名前を入力せずに「キャンセル」をクリックした場合、ファイルが保存されていないことをユーザーに通知します。



この関数がどのように表示されるかを以下に示します。

 def SaveDoc(): filename = appuifw.query(ru("  "), "text") if filename: fullpath = str(filename) + ".txt" fullpath = "c:\\" + fullpath if os.path.exists(fullpath) == 0: filewrite = open(fullpath, 'w') content = t.get().replace(u"\u2029", u"\r\n") encontent = content.encode("UTF-8") filewrite.writelines(encontent) filewrite.close() appuifw.note(ru(" " + fullpath + " !"), "conf") elif os.path.exists(fullpath) == 1: rewritefile = appuifw.query(ru("  ! ?"), "query") if rewritefile == 1: filewrite = open(fullpath, 'w') content = t.get().replace(u"\u2029", u"\r\n") encontent = content.encode("UTF-8") filewrite.writelines(encontent) filewrite.close() appuifw.note(ru(" " + fullpath + " !"), "conf") else: appuifw.note(ru("  !"), "error") else: appuifw.note(ru("  !"), "error")
      
      







テキストをファイルに保存する機能を書くとき、1つの問題がありました-内容が1行で書かれていて、改行があるはずの場所に小さな正方形が現れました。 この問題を解決するためのすべての期待を、録音前に\ nのテキストを\ r \ nに置き換えることで解決しましたが、期待は実現しませんでした。 また、フォーラムdimonvideo.ruのニックネームJOIN_MEを持っている良い人が問題の解決策を送ってくれなかったらどうするかわかりません。これは、u "\ u2029"をu "\ r \ n"に置き換えることでした。



最後の仕上げがあります:



 lock = e32.Ao_lock() os.abort = lock.signal lock.wait()
      
      







この設計は、起動直後にアプリケーションが閉じないようにするのに役立ちます。

さて、おそらく今のところはこれですべてです。



まとめると



私たちのプログラムは、長期的にどのようなものですか?

このように



そして、私たちのプログラムはスマートフォンでどのように見えますか?

このように:

画像



目標



私が欲しかったのは、スマートフォンから直接簡単なノートを書くことです。

この記事の目的は何ですか:私のような新人が実際にいくつかのポイントを学ぶのを助けること。



最後に



次は? ミッションは完了したようです。 しかし、違います! 「食欲は食べることによってもたらされます」と私たちは皆知っています。 本当に必要なものを作成したという感覚は言葉に表せません。 たとえそれが無効であっても。 PPad.py はホイッスルや偽りの嗜好や偽物を含む控えめなPPad.sisにならなければならないため、食欲は燃え上がり、アイデアがあります-この記事を続けることを意味します。 そして、明日の今日の明るい期待からの私の楽観が事実に変わることを願っています。

ご清聴ありがとうございました。



All Articles