无法捕获wxDataViewListCtrl上的双击事件

时间:2018-05-23 10:51:56

标签: python-3.x wxpython wxwidgets

大家好我正在尝试使用Python 3.X上的wxPython学习GUI编程

我试图捕获双击wxDataViewListCtrl。为了测试,我添加了一个按钮和一个数据视图列表,并为这两个对象设置了双击事件处理程序。在下面给出的脚本中显示相同的内容

当我双击按钮控件时,我能够在屏幕上看到print-statement,但是当我双击data-view-list时,事件处理程序没有被执行

wxWindow事件都不适用于wxDataViewListCtrl。我做错了什么?

import wx
import wx.xrc
import wx.dataview

class MyFrame1 ( wx.Frame ):

    def __init__( self, parent ):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )

        gSizer1 = wx.GridSizer( 2, 1, 0, 0 )

        self.m_button1 = wx.Button( self, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0 )
        gSizer1.Add( self.m_button1, 0, wx.ALL, 5 )

        self.m_dataViewListCtrl2 = wx.dataview.DataViewListCtrl( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 )
        gSizer1.Add( self.m_dataViewListCtrl2, 0, wx.ALL, 5 )


        self.SetSizer( gSizer1 )
        self.Layout()

        self.Centre( wx.BOTH )

        # Connect Events
        self.m_button1.Bind( wx.EVT_LEFT_DCLICK, self.button_double_click )
        self.m_dataViewListCtrl2.Bind( wx.EVT_LEFT_DCLICK, self.listview_double_click )

    def __del__( self ):
        pass    

    # Virtual event handlers, overide them in your derived class
    def button_double_click( self, event ):
        print("button_double_click")
        event.Skip()

    def listview_double_click( self, event ):
        print("listview_double_click")
        event.Skip()

app = wx.App()
frame = MyFrame1(None)
frame.Show()
app.MainLoop()

1 个答案:

答案 0 :(得分:2)

一般来说,您不应该能够处理低级别事件,例如来自本机控件的点击或双击,而是使用控件特定事件。在这个具体案例中,您可能希望改为使用wxEVT_DATAVIEW_ITEM_ACTIVATED