同僚の現在の同僚は、しっかりと貼り付けられ、絡み合ったパーツのプラスチシンボールでした。 したがって、そのコードを変更、補足、または最悪の場合理解することができなかったため、アーキテクチャコンポーネントを分割した後、このバラライカを書き直すことにしました。 コンソールメニューを作成するためのpythonフレームワークを探してネットに行きました。 検索は失敗しました-少なくとも少し使いやすいメニューを構築するためのフレームワークのネットワークで見つかっただけではありませんでした。 しかし、2つの「ほぼ候補」が見つかりました。 崖は私の要求と完全には一致しません。 これは実際にはコンソールメニューではなく、手動でコマンドを入力してオートコンプリートを楽しむことができるインタラクティブなセッション(コマンドライン)にすぎません。 そうではありません。 コンソールは欲望にまったく対応していません それは
同じチーズ、ただしソースが異なるまた、生よりも。 タフタロジーでごめんなさい。
実際、コンソールメニューをレンダリングするためのクラスをいくつか作成することから始めることにしました( cmd2モジュールはレンダリングモジュールの助けを提供してくれたので、小さなxmenuを操作するために必要です)。 実際には、実装にトリックはありません。 3つのクラス、歴史の保存のためのコルタン-それがすべての物語です。 結果は、このようなミニフレームワークです。 すぐに吐き出さないでください これはプレアルファ版であることをお勧めします。 そして、 githubで xmenuを拾って見ることができます。 不足しているドキュメント(これまでのところ、不足している)を理解したくない人のために、クライアントコードの例をここに公開します。
# -*- coding: utf-8 -*- import sys from pymenu import Item, Menu, App class Twitter(Item): ''' This is twitter''' def __call__(self): sys.stdout.write('{0}\n'.format(self.name)) class Multiplier(Item): ''' Printing 1. Forever 1.''' def __call__(self): sys.stdout.write('Lorem ipsum Labor Excepteur ea ut.') def func(): ''' I am a function. Tasty and fragrand.''' print 'This is it.' class MyApp(App): ''' This is my App''' def __init__(self): menu = Menu(name='Main menu') menu.add(Twitter(name='Project run'), color='red') menu.add(Twitter(name='Other')) math = Menu(name='Math') math.add(Multiplier(name='Multi'), color='underline') inc_menu = Menu(name='Database') inc_menu.add(math) inc_menu.add(Twitter(name='Create')) inc_menu.add(Twitter(name='Drop')) menu.add(inc_menu) functinons = Menu(name='Functinons', doc='Useful functions!') functinons.add(func, name='f') menu.add(functinons, color='underline') super(MyApp, self).__init__(menu=menu, stdout=sys.stdout) def main(): MyApp().run() if __name__ == '__main__': main()
次のようになります。
これは絶対に混oticとしたメニューです-塗りつぶして判断しないでください。
したがって、xmenuは以下を提供します。
- 無限ネストのメニュー(メニューはメニューにネストされています)
- 着色メニュー項目
- 歴史をさかのぼる能力(将来的には、私は歩いて前に進むかもしれません)
- 呼び出し可能なオブジェクトはすべてメニュー項目に掛けることができます
- Xmenuは、すべてのオブジェクトからドックを自動的に収集し、1つのメニューに集約します-ヘルプ。
私はオープンソフトウェア運動にあまり積極的ではありませんが、この方向に進むことを約束します。このツールを開発し、補完します。 この提案を読んでくれたすべての人に感謝し、テストしてくれた人たちに特別な感謝をし、彼らの願いを表現し、私の欠陥を強調した。 そして、Habrは、これが私の最初の記事であり、ハラマンになることを学んでいるだけなので、無駄にしようとしなかったかもしれません。
UPD:バージョンが更新されました-githubで参照してください