WX.CheckList 컨트롤의 GetFocus를 트리거 할 수있는 이벤트는 무엇입니까?
-
12-12-2019 - |
문제
ReseClist 컨트롤의 초점을 사용하여 사용자에게 사용자에게 정보를 제공하여 선택할 수 있습니다.Item 항목 이벤트에서 Self.List.getFocus를 사용할 수 있지만 확인 항목 외부에 포커스를 얻을 수없는 것 같습니다. 내 목표는 목록을 통해 사용자 탭을 갖고 목록의 초점이 변경되므로 사용자가 정보를 제공하도록 초점 표시 줄의 상태 표시 줄 정보를 표시합니다.OnCheckItem 선택은 다른 작업을 트리거하는 데 사용됩니다. 어떤 방향 으로든 어떤 방향을 줄 수 있습니까? 감사합니다
여기에 사용하는 코드가 있습니다 :
#!/usr/bin/env python
# encoding: ISO-8859-1
"""
Simple Checkbox List Control.py
"""
import wx
import wx.lib.mixins.listctrl as listmix
from wx.lib.pubsub import Publisher
listhdr=('File', 'Info','Data')
listdata=( ( "file00","info00","data0"),
( "file01","info01","data1"),
( "file02","info02","data2"),
( "file03","info03","data3"),
( "file04","info04","data4"),
( "file05","info05","data5"))
#=======================================================================
# CheckListControl Panel Class
#=======================================================================
class TestListCtrl(wx.ListCtrl, listmix.CheckListCtrlMixin, listmix.ListCtrlAutoWidthMixin):
def __init__(self, *args, **kwargs):
wx.ListCtrl.__init__(self, *args, **kwargs)
# Initialize ListCtrl Widge
listmix.CheckListCtrlMixin.__init__(self)
listmix.ListCtrlAutoWidthMixin.__init__(self)
self.setResizeColumn(3)
self.checked = -1 # class container variable for the checked item index
self.rowindex=[] # class container variable for selected row
self.status={} # Dictionary to keep track of the checklist state
#print self.GetFocus()
def OnCheckItem(self, index, flag):
self.msg1=''
self.msg2=''
if flag==True:
#msg=str('Checked Item '+str(index))
#The following insures only one checked item is checked at a time
if self.checked==-1:
self.checked=index
self.msg1='Checked box %i '%(self.checked)
else:
self.CheckItem( self.checked, False)
self.checked=index
self.msg1=' Checked box %i '%(self.checked)
if flag==False:
self.msg2=str('Unchecked Item '+str(index))
#The following addresses checked item that was unchecked
self.checked=-1
self.status[index]=flag # set dictionary to current state of any changed item
#print 'status ',self.status
#msg='Check list Status: '+str(self.status)
msg=self.msg2+self.msg1
#print msg
Publisher().sendMessage(('change_statusbar'), msg) # Communication with Main Frame
print msg
self.Refresh() # this just to insure the displayed list is current
#=======================================================================
# CheckList Panel Class
#=======================================================================
class CheckListPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.SetBackgroundColour('blue')
# Define CheckBoxList Layout
self.list = TestListCtrl(self, style=wx.LC_REPORT) # Instantiate the checklist control
self.list.InsertColumn(0, "File",width=100)
self.list.InsertColumn(1, "Info")
self.list.InsertColumn(2, "Data")
self.list.Arrange()
# Populate the List Table
for entry in listdata:
#self.list.Append([str(i), "", "It's the %d item" % (i)]) # this is from the source file template
self.list.Append(entry) # construct the table entries
# add CheckListPanel widgets to vertical sizer
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.list,1, flag=wx.EXPAND | wx.ALL, border=5)
self.SetSizerAndFit(self.sizer)
#===========================================================================================================================
# Main Frame
#===========================================================================================================================
class MainWindow(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, 'Panel with CheckBox List Control-Mixins Example', size=(700, 600))
self.sb=self.CreateStatusBar()
self.sb.SetStatusText("Check an Item")
Publisher().subscribe(self.change_statusbar, 'change_statusbar')
self.panel = wx.Panel(self)
self.list = CheckListPanel(self.panel)
# now add widgets to FramePanel
self.sizer = wx.BoxSizer(wx.VERTICAL) # create Sizer
self.sizer.Add(self.list,1, flag=wx.EXPAND | wx.ALL, border=5)
self.panel.SetSizer(self.sizer) #
self.Show()
# Set the methods to receive PubSub transfers
def change_statusbar(self, msg):
self.msg=msg
self.SetStatusText(msg.data)
app = wx.App(False)
win = MainWindow(None)
app.MainLoop()
. 해결책
잘 알아낼 수 있습니다. CheckListPanel 클래스에 추가하면 선택한 항목을 식별 할 수 있습니다.GetSelectedItem () 메서드가 이벤트를 바인딩하려면 getSelectedItem () 메서드를 사용하기 전에 목록 컨트롤을 인스턴스화해야합니다.나는 패널 세이젠을 설정 한 목록을 채우고이를 추가했습니다
# bind selected event to selected row
wx.EVT_LIST_ITEM_SELECTED(self,self.list.GetId(), self.OnSelectItem)
def OnSelectItem(self, index):
print 'Selected item index=',self.list.GetFocusedItem()
msg='Selected item index='+str(self.list.GetFocusedItem())
Publisher().sendMessage(('change_statusbar'), msg) # Communication with Main Frame
. 제휴하지 않습니다 StackOverflow