Python 3.x 无法捕获wxDataViewListCtrl上的双击事件

Python 3.x 无法捕获wxDataViewListCtrl上的双击事件,python-3.x,wxpython,wxwidgets,Python 3.x,Wxpython,Wxwidgets,大家好,我正在尝试学习在Python3.X上使用wxPython进行GUI编程 我正在尝试捕获双击wxDataViewListCtrl。为了进行测试,我添加了一个按钮和一个数据视图列表,并为这两个对象设置了双击事件处理程序。在下面给出的脚本中显示了相同的内容 当我双击按钮控件时,我能够在屏幕上看到print语句,但当我双击数据视图列表时,事件处理程序没有被执行 wxWindow事件均不适用于wxDataViewListCtrl。我做错了什么 import wx import wx.xrc imp

大家好,我正在尝试学习在Python3.X上使用wxPython进行GUI编程

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

当我双击按钮控件时,我能够在屏幕上看到print语句,但当我双击数据视图列表时,事件处理程序没有被执行

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()

一般来说,您不应该能够处理低级事件,例如来自本机控件的单击或双击,而是应该使用特定于控件的事件。在这种具体的情况下,您可能希望使用
wxEVT\u DATAVIEW\u ITEM\u ACTIVATED

一般来说,您不应该能够处理低级事件,例如来自本机控件的单击或双击,而是应该使用特定于控件的事件。在这种具体情况下,您可能希望使用
wxEVT\u DATAVIEW\u ITEM\u ACTIVATED

那么,为什么双击按钮(也是本机控件)“不保证工作”与“保证不工作”不同。处理按钮的双击事件也不是一个好主意,但是,是的,在实践中你可以(目前)得到它们。这很可能会在将来发生变化。那么,为什么双击按钮也是本机控件“不保证工作”与“保证不工作”是不同的。处理按钮的双击事件也不是一个好主意,但是,是的,在实践中你可以(目前)得到它们。这很可能在未来发生变化。