問題点
WxPythonにてself.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
def OnKeyDown(self, evt):
if evt.KeyCode == wx.WXK_LEFT:
または
def OnKeyDown(self, evt):
keycode = evt.GetKeyCode()
if keycode == wx.WXK_LEFT:
としてもカーソルキー(矢印キー)のイベントを受け付けませんでした。
対応策
以下のようにPanelを継承するクラスのコンストラクタの引数にstyle=wx.SUNKEN_BORDERをいれたら、カーソルキーイベントを受け付けるようになりました。
wx.ALIGN_LEFTでもOKでした。他のタイプでもだいじょうぶなのかな?
class GamePanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER)
なんで受け付けるようになったのでしょか
いろいろ検索しても原因がわかりませんでした。
styleの種類
python入門ブログhttps://python-minutes.blogspot.com/2016/04/wxpython_63.html
上サイトによると
また、スタイルを指定することで、文字列の表示位置や枠線の種類を指定することができます。
# 1.左寄せ(デフォルト)
text1 = wx.StaticText(panel, -1, u'テキストです', style=wx.ALIGN_LEFT)
# 2.中央寄せ
text1 = wx.StaticText(panel, -1, u'テキストです', style=wx.ALIGN_CENTER)
# 3.右寄せ
text1 = wx.StaticText(panel, -1, u'テキストです', style=wx.ALIGN_RIGHT)
# 4.枠線を表示
text1 = wx.StaticText(panel, -1, u'テキストです', style=wx.SIMPLE_BORDER)
# 5.二重線を表示
text1 = wx.StaticText(panel, -1, u'テキストです', style=wx.DOUBLE_BORDER)
# 6.凹んでいるように見える枠線を表示
text1 = wx.StaticText(panel, -1, u'テキストです', style=wx.SUNKEN_BORDER)
# 7.盛り上がっているように見える枠線を表示
text1 = wx.StaticText(panel, -1, u'テキストです', style=wx.RAISED_BORDER)
# 8.枠線を表示しない(デフォルト)
text1 = wx.StaticText(panel, -1, u'テキストです', style=wx.NO_BORDER)
今までの対応策
以下のサイトを参考にして、タイマーでmetaGetkeyを動作させてキーイベントをひろっています。
Pythonでキーイベント取得(Windows)
http://shade777.blog54.fc2.com/blog-entry-579.html
LEFT = 0x25
RIGHT = 0x27
DOWN = 0x28
UP = 0x26
def OnTimer(self, event):
self.metaGetkey()
def getkey(self, key):
return(bool(ctypes.windll.user32.GetAsyncKeyState(key)&0x8000))
def metaGetkey(self):
keycode = 0
if self.getkey(LEFT):
keycode = wx.WXK_LEFT
0 件のコメント:
コメントを投稿