2014-10-14 6 views
0

격자가있는 wxPython GUI가 있습니다. 사용자가 특정 셀을 클릭하면 드롭 다운 메뉴가 나타납니다.wxpython 이벤트 순서

self.window.Bind(wx.grid.EVT_GRID_SELECT_CELL, lambda event: self.on_left_click(event, self.grid, choices), self.grid) 

on_left_click 메서드는 드롭 다운 메뉴를 끌어 올리고 예상대로 작동합니다. 문제는 wx.grid.EVT_GRID_SELECT_CELL의 기본 동작이 일 처음으로이 발생하고 내 맞춤 메서드가 실행되도록하려는 것입니다. 일반적으로 표 셀을 클릭하면 해당 셀의 테두리가 굵게 표시됩니다. 바인딩을 사용하면 내 드롭 다운 메뉴가 먼저 나타나고 드롭 다운 메뉴가 닫히면 셀 테두리가 선택됩니다. self.grid.SetGridCursor (row, col)를 호출 해봤지만 wx.grid.EVT_GRID_SELECT_CELL 이벤트가 발생합니다.이 이벤트는 재귀가 최대로 나오고 분명 좋지 않습니다. 또한 on_left_click 코드에서 event.Skip()을 사용하여 시도했지만 효과가없는 것 같습니다. 필요한 경우 내가 코드의 자세한 내용을 제공하기 위해 기쁘게 생각합니다 grid looking more appropriate

: grid looking all weird 다음

원하는 동작입니다 : 여기

는 (난 그냥, 행 0에 COL 2 클릭) 어색한, 이의 동작입니다 . 나는 다음 중 하나를하고 싶다. 하나, 어떻게 든 내 사용자 정의 드롭 다운 메뉴로 이동하기 전에 wx.grid.EVT_GRID_SELECT_CELL을 완전히 처리하도록 wxPython을 강제 실행하십시오. 2, 수동으로 내 셀의 코드에서 선택한 셀을 "강조 표시"하는 효과를 복제하십시오.

미리 도움을 청하십시오.

편집 :

다음은 내가 한 일입니다.

는 wx.grid.EVT_GRID_SELECT_CELL 대신에, 나는 기본적으로 사용자가 그리드 셀을 클릭하면 해고 할 첫번째 이벤트 wx.grid.EVT_GRID_CELL_LEFT_CLICK을 사용, 그래서 나는 완전히 행동이 초기 것을 다음과 같은 사용자 정의 할 수 있습니다 딸깍 하는 소리. 그런 다음,이를 사용할 수 있습니다

self.grid.SetGridCursor(row, col) 

는 무한 재귀 오류를 만들뿐만 아니라, 지금보다 원활하게 작동하고 다른 행동의 무리를 구현하지 않고 셀을 간략하게 설명 할 수 있습니다. 또한 self.grid.Refresh()를 사용해야했습니다.

답변

0

드롭 다운 메뉴를 표시하는 별도의 방법을 만들고 wx.CallAfter이라고 부릅니다.

def on_left_click(self, event, grid, choices): 
    event.Skip() 
    self.grid.Refresh() 
    wx.CallAfter(self.showMenu, grid=grid, choices=choices) 


def showMenu(self, grid=None, choices=None): 
    # Drop down menu code goes here