【问题标题】:Binding keyboard shortcuts to GLCanvas in wxPython在 wxPython 中将键盘快捷键绑定到 GLCanvas
【发布时间】:2015-08-19 02:43:22
【问题描述】:

是否可以在 wxpython 中将键盘快捷键(如 Ctrl+z 到 Undo、Ctrl+Shift+z 到 Redo、Ctrl+cCtrl+v 等)绑定到 wxpython 中的 GLCanvas?如果是这样,有人可以提供一个最小的例子,比如单击绘制一个球体,然后使用快捷方式撤消和重做?

【问题讨论】:

    标签: python-2.7 opengl wxpython


    【解决方案1】:
    import wx
    from wx import glcanvas
    
    class myFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, title='test')
            self.gl = MyCanvasBase(self)
            self.Show()
    
    class MyCanvasBase(glcanvas.GLCanvas):
    
        def __init__(self, parent):
            glcanvas.GLCanvas.__init__(self, parent, -1, style=wx.WANTS_CHARS)
            self.Bind(wx.EVT_CHAR, self.OnKeyDown) # for wx.WANTS_CHARS
            # self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
    
        def OnKeyDown(self, evt):
            keycode = evt.GetKeyCode()
            print keycode
    
    if __name__ == '__main__':
        app = wx.App(0)
        Frame = myFrame()
        app.MainLoop()
        app.Destroy()
    

    (edit) control+c 等可以通过将窗口样式设置为 wx.WANTS_CHARS 来捕获。我进行了更改以使用该样式。

    这是我尝试做一个捕获按键事件但没有多维数据集的最小示例。

    你看过 wxphython 演示吗?那是 wxpython 最好的学习资源之一。如果你安装wxPython2.8-win32-docs-demos-2.8.12.1.exe,你会发现一个OpenGL 示例代码,其中包含一个可以用鼠标旋转的立方体。

    【讨论】:

    • 感谢您的努力。但是您提供的示例没有捕获任何快捷方式(组合键,如ctrl + key)它只捕获一个键。我也试试wx.EVT_CHAR
    • 我不知何故错过了你需要 ctrl+C 等。是的,EVT_CHAR 是要走的路,但你需要为你的小部件设置 WANTS_CHARS 样式。我在答案中编辑了我的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2016-12-02
    相关资源
    最近更新 更多