Невозможно захватить событие двойного щелчка на wxDataViewListCtrl - PullRequest
0 голосов
/ 23 мая 2018

Привет, ребята. Я пытаюсь выучить программирование GUI с помощью wxPython на Python 3.X

Я пытаюсь захватить двойной щелчок на wxDataViewListCtrl.Для тестирования я добавил кнопку и список просмотра данных и установил обработчик событий двойного щелчка для обоих объектов.То же самое показано в приведенном ниже сценарии

Когда я дважды щелкаю по кнопке-контролю, я могу видеть оператор печати на экране, но когда я дважды щелкаю по списку-просмотру данных, обработчик событий невыполняется

Ни одно из событий 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 голосов
/ 23 мая 2018

Вообще говоря, вы не должны иметь возможность обрабатывать события низкого уровня, такие как щелчки или двойные щелчки из собственных элементов управления, но вместо этого использовать события, специфичные для элементов управления.В данном конкретном случае вы, вероятно, захотите использовать wxEVT_DATAVIEW_ITEM_ACTIVATED.

...