大家好我正在尝试使用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()
答案 0 :(得分:2)
一般来说,您不应该能够处理低级别事件,例如来自本机控件的点击或双击,而是使用控件特定事件。在这个具体案例中,您可能希望改为使用wxEVT_DATAVIEW_ITEM_ACTIVATED
。