绑定到框架wxPython

时间:2013-03-31 01:51:40

标签: python wxpython bind

由于某种原因它没有读取任何按下的键我花了一整天寻找示例和修复此功能并无济于事我无法弄清楚原因。尝试使用面板如下所示,但我用来了解wxpython的教程是有问题的,甚至那些代码的复制粘贴也不起作用。这个例子不使用面板,只是一个self.Bind(wx.EVT_KEY_UP,self.keyPressed)。任何人都可以向这位初学者提供帮助吗?

 import wx
 import time
 from threading import Thread

 class frame(wx.Frame):
     def  __init__ (self):
             style = (wx.CLIP_CHILDREN | wx.STAY_ON_TOP | wx.FRAME_NO_TASKBAR |    wx.NO_BORDER |wx.FRAME_SHAPED)  
             wx.Frame.__init__(self,None, title='test', style = style, size = (300,150))
             self.panel = wx.Panel(self,-1)
             self.Bind(wx.EVT_KEY_DOWN, self.keyPressed, self.panel)
             self.SetFocus()
             self.SetTransparent(0)
             self.Show(True)

    def keyPressed(self,event=None):
            print "somethine is pressed"
            key = event.GetKeyCode()
            if key == wx.WXK_ESCAPE or key == ord('Q'):
                    self.Close(force=True)
                    self.Show(False)
            else:
                    event.Skip()

    def duration(self, dur):
            start = int(time.time())
            self.closeTime = False
            while not self.closeTime:
                    actDur = int(time.time()) -start
                    if actDur == dur:
                            self.Show(False)
                            self.closeTime = True
   app = wx.App(False)
   f = frame()
   #timing = Thread(target=f.duration, args= (5,))
   #timing.start()
   app.MainLoop()

2 个答案:

答案 0 :(得分:0)

像这样绑定到面板

self.panel.Bind(wx.EVT_KEY_DOWN, self.keyPressed)

答案 1 :(得分:0)

面板可能难以绑定,因为它喜欢将焦点转移到其子节点上。框架做了很多相同的事情。如果您只想绑定按键,则可能需要查看AcceleratorTable:

这些也可能对你有所帮助: