キーストロークで16進数を入力するか、テキストコントロールにコピーアンドペーストしたいと思います。 私の入力はスペースで表示されます。 「12345678」と入力すると、テキストコントロールに「12 34 56 78」と表示されます。 私はEVT_TEXTイベントでそれに挑戦しています。 しかし、私はそれを解決することはできません。wxpythonのテキストコントロールにスペースを含む16進数文字列を表示するにはどうすればいいですか?
0
A
答えて
1
更新:次の実装があります。進むべき道は、EVT_KEY_DOWN
を処理するためにある、代わりにEVT_TEXT
のそれが役に立てば幸い:
# -*- coding: utf-8 -*-
import re
import wx
###########################################################################
## Display hex digit string with space on text control in wxpython;
## input hex digit with key stroke or copy and paste on text control
###########################################################################
class MyFrame1 (wx.Frame):
def __init__(self, parent):
wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = "INPUT DEMO", pos = wx.DefaultPosition, size = wx.Size(200,150), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL)
self.m_panel1 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
self.m_staticText1 = wx.StaticText(self.m_panel1, wx.ID_ANY, u"HEX STRING", (-1, 10), wx.DefaultSize, 0)
self.m_textCtrl1 = wx.TextCtrl(self.m_panel1, wx.ID_ANY, wx.EmptyString, (-1, 30), wx.Size(190, -1), 0)
self.Layout()
self.Centre(wx.BOTH)
# Connect Events
self.m_textCtrl1.Bind(wx.EVT_KEY_DOWN, self.onKeyPress)
# Disable right-click menu (optional)
self.m_textCtrl1.Bind(wx.EVT_CONTEXT_MENU, self.skip)
self.Show()
def skip(self, event):
"""
Disable right click menu popup
"""
pass
# Virtual event handlers, overide them in your derived class
def onKeyPress(self, event):
"""
Key press event handler
"""
keycode = event.GetKeyCode()
if event.ControlDown() and keycode == 67:
# ctrl + c pressed
clipdata = wx.TextDataObject()
text_string = self.m_textCtrl1.GetValue()
clipdata.SetText(text_string)
wx.TheClipboard.Open()
wx.TheClipboard.SetData(clipdata)
wx.TheClipboard.Close()
elif event.ControlDown() and keycode == 86:
# ctrl + v pressed
self.paste()
elif 48<= keycode <= 57 or 324<= keycode <= 333:
self.justify()
event.Skip()
elif 65 <= keycode <= 70: # or 97 <= keycode <= 102:
self.justify()
self.m_textCtrl1.AppendText(chr(keycode))
self.justify()
# When backspace, Del,<- and -> Pressed
elif event.GetKeyCode() in [ 8, 127, 314, 316 ]:
event.Skip()
def justify(self):
"""
Fill space to typed string if required
"""
curPos = self.m_textCtrl1.GetInsertionPoint()
self.m_textCtrl1.AppendText(" " * ((curPos + 1)%3 == 0))
def paste(self):
"""
Paste Hex string from clipboard
"""
if not wx.TheClipboard.IsOpened(): # may crash, otherwise
do = wx.TextDataObject()
wx.TheClipboard.Open()
success = wx.TheClipboard.GetData(do)
wx.TheClipboard.Close()
if success:
s = re.sub('[^\da-fA-F]+', '', do.GetText())
if s:
toPaste = " ".join(s[i:i+2] for i in range(0, len(s), 2))
self.m_textCtrl1.SetValue(toPaste.upper())
self.justify()
self.m_textCtrl1.SetInsertionPointEnd()
if __name__ == '__main__':
app = wx.App()
frame = MyFrame1(None)
app.MainLoop()
+0
あなたのコードをありがとう。あなたのコードをテストしました。それは正しく動作します – user1395438
関連する問題
- 1. 16進文字列を16進数値に変換するにはどうすればよいですか?
- 2. 16進値を含む文字列をPHPの16進値に変換するにはどうすればよいですか?
- 3. 数値から16進文字列を表現するにはどうすればよいですか?
- 4. 16進数文字列を含む整数を追加する
- 5. 各文字列の間に特定の数のスペースを含む文字列を含むリストを印刷するにはどうすればよいですか?
- 6. 数字を16進文字列にフォーマットするにはどうすればよいですか?
- 7. 長い文字列を15文字のテキストコントロール/ラベルでスクロールするにはどうすればいいですか?
- 8. 文字列を16進数で16進数に変換する
- 9. 文字列の16進値を数値に変換するにはどうすればよいですか?
- 10. 整数を4桁の16進文字列に変換するにはどうすればよいですか?
- 11. 16進数0x00を含む文字列をクリップボードにコピー
- 12. PowerShellで文字列を16進数のシーケンスとして扱うにはどうすればよいですか?
- 13. hsqlのlongvarbinary列に16進文字列を挿入するにはどうすればよいですか?
- 14. UDFで文字列を16進数で表示する
- 15. Javascript:decバイト配列オブジェクトを16進文字列に変換するにはどうすればよいですか?
- 16. 数字を含む文字列を分割するにはどうすればいいですか
- 17. 16進数の文字をNotepad ++で置き換えるにはどうすればいいですか?
- 18. ヒンディー文字を含む文字列の文字のUnicode 10進表現を取得するにはどうすればよいですか?
- 19. 16進数の文字列をUTF-16ファイルに書き込む
- 20. Pythonで長い16進文字列を16進数に変換します
- 21. 文字エスケープシーケンスを含む文字列をcharに変換するにはどうすればよいですか?
- 22. 複数のビューバッグをHtmlテキストコントロールに表示するにはどうすればいいですか?
- 23. 数式と化学式をFlex 4のテキストコントロールに表示するにはどうすればいいですか?
- 24. 文字列を16進数に変換する16 pythonで3
- 25. 16進数の文字で表現された16進数
- 26. 文字列を16進数と16進数に変換する方法は?
- 27. アラビア文字を含む文字列を検索するにはどうすればよいですか?
- 28. u '文字を含むJSON文字列を解析するにはどうすればよいですか?
- 29. #文字を含む文字列を解析するにはどうすればよいですか?
- 30. 列を16進文字列から長い文字列に変換するにはどうすればよいですか?
マスクされたtextctrlはあなたがwx.lib.maskedに位置、探しているものかもしれません。 – Yoriz