私はすべてのコマンドの後に ">>>"とプロンプトを表示する私のアプリのためのシェルのようなコンソールを持っています。問題はシェルWriteText( ">>>")があるたびに新しい行を追加することです。ユーザーは正しい行までバックスペースできますが、これはちょっとひどいです。それを修正する方法はありますか?wxpythonの後の改行を防ぐTextCtrl.WriteText()
答えて
TextCtrl
のスタイルはwx.TE_PROCESS_ENTER
とし、EVT_TEXT_ENTER
というイベントのみをバインドしていると思われます。これは、同じ問題が発生したためです。
私の最初の本能は、wx.EVT_TEXT_ENTER
を処理する方法を書いて、TextCtrl:Remove()
メソッドを使用することでした。このメソッドは、残念なことに可視文字を削除するように見えます。私の次の考えは、バックスペース(WKX_BACK
)と一緒にEmulateKeyPress()
メソッドを使用して改行文字を消去することでした。私はwx.KeyEvent
を偽装するための良い方法を考え出すことができませんでしたが、これはなんとかなるかもしれません(EVT_TEXT_ENTER
がKeyEvent
をCommandEvent
を送信し、ないので、ちょうどevent.m_keyCode
を使用することはできません)ので、私は誤る...そのアプローチをあきらめた、Iこの解決策が読者に運動として残されていることを意味します。
wx.EVT_TEXT_ENTER
は、CommandEvent
であり、最終的には機能した第3の角度に導かれた。 wx.EVT_TEXT_ENTER
をバインドする代わりに、wx.EVT_CHAR
をバインドし、Return
キー(ASCIIキーコード13)の特別な処理でロジックに入れました。以前私が話したEmulateKeyPress()
ビットを実装する予定でしたが、wx.TE_PROCESS_ENTER
をTextCtrlスタイルから削除したとき、私は\n
がもはや秘密裏に追加されていないことを発見しました。コードは次のとおりです。
import wx
class TestRun(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self, parent, title="StackO Test", size=(400,400))
self.control = wx.TextCtrl(self, id=wx.ID_ANY, style=wx.TE_MULTILINE)
self.control.Bind(wx.EVT_CHAR, self.OnPress)
self.Show(True)
def OnPress(self, event):
if event.GetKeyCode() == 13:
self.control.WriteText('\n>>>')
else:
event.Skip()
if __name__ == '__main__':
app = wx.App(False)
TestRun(None)
app.MainLoop()
event.Skip()
が重要です。私の研究では、KeyEvent
には通常CharEvent
が続きます。 CharEvent
は、文字がTextCtrl
に書き込まれる部分です。 KeyEvent
を傍受すると、CharEvent
が明示的に呼び出された場合にのみ呼び出されます。が正常に動作するようにするには、event.skip()
が非常に重要です。それがなければ、ASCIIキーコード13と等しくないキーボード入力は何もしません。
私のテストから、TextCtrl
には、を呼び出すたびに改行を出力させるスタイルwx.TE_PROCESS_ENTER
があると宣言しているようです。挿入ポイントが常に適切な場所にあることを確認することに関して、もっと多くの作業が必要になりますが、私のやり方はこれを回避します。
最高の運が!
ちょっと変わった後にこれを理解しましたが、すばらしい答えです。 – Shaunak
私の特定のセットアップ/ケースはまったく同じではないかもしれませんが、 'wx.TextCtrl.write(text)'が 'wx.TextCtrl.write(text.rstrip())'を実行するだけで改行を追加するのを防ぎました。私自身の 'text'変数に改行を入力しなかったので驚いていましたが、どうやら' .write() 'で何らかの形で追加し、テキスト変数に' .rstrip() 'を使用すると、 (@チャックスマッシュのための明確で広範な答えに対して+1)。 – Montmons
- 1. ラジオボタンの改行を防ぐ方法は?
- 2. インラインブロック後の改行を防止する
- 3. <form></form>内の改行/改行を防ぐ方法?
- 4. aspのリスト項目の改行を防ぐ方法:bulletedlist?
- 5. 改行を貼り付けるのを防ぐ
- 6. PHP - 動的に作成されたテキストエリアの改行を防ぐ
- 7. Wildflyログの改行文字を防ぐ方法は?
- 8. ログアウト後のバックアクションを防ぐ
- 9. 改行を防ぐためにテキストを停止する
- 10. Rコンソール(Mac)で余分な改行を防ぐ方法
- 11. XSLはコピーで新しい空白/改行を防ぐ
- 12. PHP:不要な改行を防ぐ方法
- 13. YAMLが改行なしで長い行をダンプするのを防ぐ方法
- 14. TinyMCEの改行の防止
- 15. Djangoのレスポンスフレームワークがテキストファイルの改行を削除するのを防ぐには?
- 16. 改行後の改行.insertHtml
- 17. RichTextBox改行後の改行
- 18. HTMLコードの改行による出力のスペースを防ぐには?
- 19. Android Spinner - 更新後のクローズを防ぐ
- 20. 段落と次の表の間の改ページを防ぐ方法
- 21. 特定の細胞の改変を防ぐ方法は?
- 22. System.Windows.Forms.Buttonの改行を防止する
- 23. アクティビティへの移行を防ぐ方法
- 24. イベントハンドラの実行を防ぐには?
- 25. テキストエリアでの改行の防止
- 26. 防ぐ第二の実行jqueryの
- 27. CSS:改行の後:
- 28. ハイフン後の改行
- 29. を防ぐページスクロール
- 30. ルーピングを防ぐ
これはwxpythonのTextCtrl.WriteText()操作です – Shaunak
(何かどこかに改行を追加しています...それがどこにあるかを調べる:p) –
試しました。はい、本当にひどい。それのための解決策がありません – joaquin