[Python-ml-jp 3825] Re: wxPython で frame に KeyEvent を post できません

irieda noboru irieda @ gmail.com
2006年 12月 19日 (火) 17:14:43 JST


nobonobo @ python.matrix.jpです。

Altキーはシステムが受け取るようです。
WM_CHARはアプリ用、WM_SYSCHARがシステム用のメッセージIDなんですが、
wxWidgetsに相当するメッセージIDが無いような・・・。

解決策はwin32apiモジュールを使うぐらいでしょうか。

-- 
Noboru Irieda
HN: NoboNobo
HP: http://python.matrix.jp

06/12/19 に kenji<kenji @ nasuinfo.or.jp> さんは書きました:
> 小林@那須です。テストの自動化のために、キー操作を KeyEvent の post
> でシミュレーションしようとしています。でもマニュアル操作したときのよ
> うに動いてくれません。付録コードのような単純なコードにしても動いてく
> れません。Alt + 'F' と同じ動作をして、About, Exit どちらかを選択させ
> るメニューが出るはずなのですが。
>
> 私自身 windows でメッセージを投げるやりかたに慣れていない面があります。
> 何らかの基本的な考え方の誤りが入り込んでいる気もします。いろいろと調
> べて見ましたが解りません。アドバイスをいただけますでしょうか。
>
> 動作環境は Win2K, python2.4 Enthought Package です。よろしくお願いし
> ます。
>
> ======= kVerifier Lab =============================
> EMAIL kenji @ nasuinfo.or.jp
> 小林憲次
> ===================================================
>
> ==================  付録コード begin ====================
> //@@
> #06.12.19
> import os
> import wx
> ID_ABOUT=101
> ID_EXIT=110
>
> inGb = 0
>
> class MainWindow(wx.Frame):
>     def __init__(self,parent,id,title):
>         wx.Frame.__init__(self,parent,wx.ID_ANY, title, size = ( 200,100),
>
>                                         style=wx.DEFAULT_FRAME_STYLE|
>                                         wx.NO_FULL_REPAINT_ON_RESIZE)
>         self.control = wx.TextCtrl(self, 1, style=wx.TE_MULTILINE)
>         self.CreateStatusBar() # A StatusBar in the bottom of the window
>         # Setting up the menu.
>         filemenu= wx.Menu()
>         # Infomation ... 以下は status bar に表示される
>         filemenu.Append(ID_ABOUT, "&About"," Information about this program")
>         filemenu.AppendSeparator()
>         filemenu.Append(ID_EXIT,"E&xit"," Terminate the program")
>         # Creating the menubar.
>         menuBar = wx.MenuBar()
>         menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar
>         self.SetMenuBar(menuBar)  # Adding the MenuBar to the Frame content.
>         wx.EVT_MENU(self, ID_ABOUT, self.OnAbout) # attach the menu-event ID_ABOUT to the
>                                                            # method self.OnAbout
>         wx.EVT_MENU(self, ID_EXIT, self.OnExit)   # attach the menu-event ID_EXIT to the
>                                                            # method self.OnExit
>         self.Show(True)
>     def OnAbout(self,e):
>         d= wx.MessageDialog( self, " A sample editor \n"
>                             " in wxPython","About Sample Editor", wx.OK)
>                             # Create a message dialog box
>         d.ShowModal() # Shows it
>         d.Destroy() # finally destroy it when finished.
>     def OnExit(self,e):
>         self.Close(True)  # Close the frame.
>
>     def OnIdle(self, eventAg):
>         global inGb
>         inGb += 1
>         print "debug inGb:", inGb
>         if inGb == 10:
>             evAt = wx.KeyEvent(eventType=wx.wxEVT_KEY_DOWN)
>             #evAt = wx.KeyEvent(eventType=wx.wxEVT_CHAR)
>             evAt.m_altDown = True
>             evAt.m_controlDown = False
>             evAt.m_metalDown = False
>             evAt.m_scanCode = False
>             evAt.m_shiftDown = False
>             evAt.m_keyCode = ord('F')
>             evAt.m_rawCode = ord('F')
>             evAt.m_rawFlags = 539033601
>             evAt.m_x = 39
>             evAt.m_y = 363
>             wx.PostEvent(self, evAt)
>
>
> app = wx.PySimpleApp()
> frame = MainWindow(None, -1, "Sample editor")
>
> wx.EVT_IDLE(frame, frame.OnIdle)
> app.MainLoop()
> //@@@
> //copy \#####.### temp.py /y
>
> ==================  付録コード end ====================
> _______________________________________________
> Python-ml-jp mailing list
> Python-ml-jp @ python.jp
> http://www.python.jp/mailman/listinfo/python-ml-jp
>



Python-ml-jp メーリングリストの案内