問題タブ [urwid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - メインのグローバル変数がPythonの別の関数で認識されない
以下のコードは、レイアウトを作成し、レイアウトにテキストを表示します。次に、urwid ライブラリの生の表示モジュールを使用して、コンソール画面にレイアウトを表示します。ただし、main で宣言されたグローバル変数 ui が別の関数で認識されないため、コードの実行は失敗します。
実行中のエラー コードは次のとおりです。
Traceback (most recent call last):
File "./yamlUrwidUIPhase6.py", line 97, in <module>
main()
File "./yamlUrwidUIPhase6.py", line 90, in main
form = FormDisplay()
File "./yamlUrwidUIPhase6.py", line 23, in __init__
palette = ui.register_palette([
NameError: global name 'ui' is not defined
コード :
この基本的なコード フレームワークにさらに追加するつもりであるため、関数 formLayout を変更したくありません。yml ファイルからの値の読み取りに基づいて画面を更新し続けるために、formLayout を繰り返し呼び出す別の関数が追加されます。
python - urwid を使用してコンソール画面を作成しようとすると「アサーション エラー」が発生する
以下のコードは、レイアウトを作成し、レイアウトにテキストを表示します。次に、urwid ライブラリの生の表示モジュールを使用して、コンソール画面にレイアウトを表示します。(私の完全なプロジェクトに関する詳細情報は、コンソール プロジェクトのウィジェット アドバイスおよびコンソール プロジェクトのurwid での質問から収集できます。私のスカイプ ヘルプ リクエストはこちらにあります。)ただし、以下に説明するようにアサーション エラーが発生するため、コードの実行は失敗します。
実行中のコードのエラー:
Traceback (most recent call last):
File "./yamlUrwidUIPhase6.py", line 98, in <module>
main()
File "./yamlUrwidUIPhase6.py", line 92, in main
form.main()
File "./yamlUrwidUIPhase6.py", line 48, in main
self.view = formLayout()
File "./yamlUrwidUIPhase6.py", line 77, in formLayout
ui.draw_screen(dim, frame.render(dim, True))
File "/usr/lib64/python2.7/site-packages/urwid/raw_display.py", line 535, in draw_screen
assert self._started
AssertionError
コード :
この基本的なコード フレームワークにさらに追加するつもりであるため、関数 formLayout を変更したくありません。yml ファイルからの値の読み取りに基づいて画面を更新し続けるために、formLayout を繰り返し呼び出す別の関数が追加されます。yaml ファイルの読み取りと、順序付けされた辞書の抽出を処理する別のコードが既にあります。基本的な urwid コンソールを機能させる方法を理解したら、両方を統合して最終的なアプリケーションを作成する作業に進むことができます。
python - urwid を使用してコンソール画面を作成しようとすると「AttributeError」が発生する
以下のコードは、レイアウトを作成し、レイアウトにテキストを表示します。次に、urwid ライブラリの生の表示モジュールを使用して、コンソール画面にレイアウトを表示します。(私の完全なプロジェクトの詳細については、コンソール プロジェクトのウィジェット アドバイスおよびコンソール プロジェクトのurwidの質問から収集できます。私のスカイプ ヘルプ リクエストはこちらにあります。) ただし、以下で説明するように AttributeError が発生するため、コードの実行は失敗します。/usr/lib64/python2.7/site-packages/urwid で urwid のソース コードを見ると、main_loop.py と curses_display.py の両方に異なる引数を持つ draw_screen 関数があることがわかります: main_loop.py -> def draw_screen(self ):
curses_display.py > def draw_screen(self, (列, 行), r):
import draw_screen from specificFileコマンドのようなもので使用するものを指定する必要がありますか? または、キャンバスの概念を見ている根本的に間違っているものはありますか? また、ファイル /usr/lib64/python2.7/site-packages/urwid/ container.pyのフレーム クラス ( class Frame(BoxWidget): ) にレンダリング関数 ( def render(self, size, focus ) があることもわかります=偽): )
実行中のコードのエラー:
Traceback (most recent call last):
File "./yamlUrwidUIPhase6.py", line 104, in <module>
main()
File "./yamlUrwidUIPhase6.py", line 98, in main
form.main()
File "./yamlUrwidUIPhase6.py", line 51, in main
self.loop.run()
File "/usr/lib64/python2.7/site-packages/urwid/main_loop.py", line 274, in run
self.screen.run_wrapper(self._run)
File "/usr/lib64/python2.7/site-packages/urwid/raw_display.py", line 237, in run_wrapper
return fn()
File "/usr/lib64/python2.7/site-packages/urwid/main_loop.py", line 285, in _run
self.draw_screen()
File "/usr/lib64/python2.7/site-packages/urwid/main_loop.py", line 508, in draw_screen
canvas = self._topmost_widget.render(self.screen_size, focus=True)
AttributeError: 'NoneType' object has no attribute 'render'
コード :
この基本的なコード フレームワークにさらに追加するつもりであるため、関数 formLayout を変更したくありません。yml ファイルからの値の読み取りに基づいて画面を更新し続けるために、formLayout を繰り返し呼び出す別の関数が追加されます。yaml ファイルの読み取りと、順序付けされた辞書の抽出を処理する別のコードが既にあります。基本的な urwid コンソールを機能させる方法を理解したら、両方を統合して最終的なアプリケーションを作成する作業に進むことができます。
python - Python プログラムの実行後にコマンド プロンプトがめちゃくちゃになる
以下のコードは、レイアウトを作成し、レイアウトにテキストを表示します。次に、 Urwidライブラリの生の表示モジュールを使用して、コンソール画面にレイアウトが表示されます。(私の完全なプロジェクトの詳細については、1D コンソール アプリケーションを表示するために必要なウィジェットおよびUrwid を使用して 2D コンソール アプリケーションを作成する の質問から収集できます。
私のスカイプヘルプリクエストはここにあります。コードを実行して関連情報を表示できます。コードを押すF8と、終了するかどうか画面にダイアログが表示されます。「y」キーを押すと、アプリケーションが終了します。しかし、その直後にコマンドプロンプトが台無しになります。コマンドプロンプトで何も書き込めません。ボタンをEnter押すだけで、次のようにコマンド プロンプトが繰り返されます。
コードは次のとおりです。
アプリケーションが終了した後に表示される動作は、関数 FormDisplay、formlayout、および formlayoutExit の戻り呼び出しで何かを行う必要があると思われます。この問題を解決するにはどうすればよいですか?
python - urwid の例における属性の意味
私は Urwid ライブラリ (Python で構築されたもの) を使用する初心者であり、urwid の例でいくつかの既存の urwid の例を理解しようとしています。それらの1つはこのコードです:
- この例では、属性はどのように機能しますか?
- 前景と背景とはどういう意味ですか?
- map1 "wraps" txt とはどういう意味ですか? map1 という名前のウィジェットを作成し、ウィジェットを txt が配置されている画面位置に配置するということですか? 「ウィジェット A を別のウィジェット B でラップする」というフレーズは、「ウィジェット A をウィジェット B にマップする」と言うのと同じ意味ですか?
- map1 は Filler 装飾ウィジェットの original_widget ですか?
- streak の垂直方向の高さと txt の垂直方向の高さが正確に一致するコード部分はどれですか? streak の垂直方向の高さが txt の垂直方向の高さよりも大きくなったり小さくなったりしないのはなぜですか? map2 がない場合、txt1 を除く画面の残りの部分は赤になるか、黒だけになるのでしょうか?
python - urwid で ListBox を使用しているときに 'AttributeError' が発生する
以下の urwid ライブラリを使用するコードは、コンソール画面に yml ファイル (ここで指定) の内容を表示することになっています (ここでのアプリケーション フォームのレイアウトに従って:
コードは:
ui
コンソール画面を表すために使用するコード。キーが$displayであるymlファイルからの値を含むグローバルリストボックスAPIを使用しました。コードは以下のエラーを出して失敗します:
コードの解析セクションを ddd および pydb デバッガーでチェックしたところ、解析 yml セクションは問題ないようで、print ステートメントは $display の値を正しく示しています。ui の使用方法に何か問題がありますか? 代わりに draw_screen を使用する必要がありますか?
python - urwid のラインボックス ウィジェットに一連の列を配置できない
yml フォーム ファイルを読み込んで、その内容を urwid の列として取得しています。これらの列をコンソールに表示する必要があります。プレーンなリストボックスとリストウォーカーを使用すると、画面に表示される列を取得できます。ただし、いくつかの列をブロックとしてグループ化し、それをラインボックス ウィジェットに表示する必要があります。どうすればそうできますか?
私の列ウィジェットにはそれぞれ 2 つの列があり、最初の列はテキスト ウィジェットで、2 番目の列は編集ウィジェットです。これは私が試したものです:
以下のように、blockPile (blockPile = urwid.Pile([ ]) として宣言) という名前のパイルに追加することにより、列のパイルを作成しようとしました:
blockPile.contents.append(columnEntry, options='pack')
しかし、このエラーが発生しました
TypeError: append() got an unexpected keyword argument 'options'
次にオプションを削除し、これを使用しました:
blockPile.contents.append(columnEntry)
しかし、次のエラーが発生しました
urwid.container.PileError: added content invalid: <Columns selectable box/flow widget>
次にリストボックスを使用しました
blockContent = urwid.SimpleListWalker([])
blockListbox = urwid.ListBox(blockContent)リストボックス内の列に合わせて追加を使用しました
blockContent.append(columnEntry)
最後にリストボックスをボックスアダプターに入れる
box = urwid.BoxAdapter(blockContent, height = 20)
そしてそれをラインボックスに返します
return urwid.LineBox(box, title='|** Block **|')
しかし、今は次のエラーが発生します
AttributeError: 'SimpleListWalker' object has no attribute 'selectable'
リストボックスとリストウォーカーのみを使用し、リストボックスを他のものに合わせない場合、すべてが正常に機能します。しかし、列のリストボックスをラインボックスに入れたいです。どうすればそうできますか?
python - Python3:例外チェーンをパージしますか?
ブロック内で例外を発生except:
させようとしていますが、インタープリターは役に立ち、「強制的に」スタック トレースを出力しようとします。これを回避することは可能ですか?
少しの背景情報: Python のTUI ライブラリである urwid をいじっています。ユーザー インターフェイスは、 を呼び出して開始し、を上げurwid.MainLoop.run()
て終了します。これまでのところ問題なく動作していますが、別の例外が発生するとどうなりますか? たとえば、キャッチしているとき(urwid MainLoop はそうではありません)、適切な例外を発生させて、クリーンアップを行い、ユーザー インターフェイスを終了したいと考えています。ただし、これにより、画面がスタック トレースでいっぱいになります。 urwid.ExitMainLoop()
KeyboardInterrupt
いくつかの小さな調査では、python3 がチェーンされた例外を記憶しており、'cause': を使用して明示的に例外を発生させることができることが示されましたraise B() from A()
。発生した例外に関するデータを変更または追加する方法をいくつか学びましたが、この機能を「無効にする」方法は見つかりませんでした。スタック トレースや行の出力を避けたいのですが、ブロックの外側で行うようにThe above exception was the direct cause of...
、ブロック内でインターフェイス終了例外を発生させます。except:
これは可能ですか、それとも根本的に間違ったことをしていますか?
編集:これは私の現在のアーキテクチャに似た例で、同じ問題が発生します:
残念ながら、私も同様main_loop
に変更できません。KeyboardInterrupt
これを解決するパターンはありますか?
python - Python: urwid: 異なるビューを処理しようとしています
さまざまなビューを持つプログラムを作成しようとしています。
urwid を使用してさまざまなビューを処理するクラスを作成し、ビュー コードを残りから分離しようとしました。しかし、さまざまな試行錯誤の後、どこから始めればよいかわかりません。
画面をきれいに消去して再描画するには、どの urwid オブジェクトが必要ですか? また、ユーザー入力後にビューを切り替えることができるように、どのようにカプセル化する必要がありますか?