當用戶將列拖動到新索引時,將觸發wx.grid.EVT_GRID_COL_MOVE
事件。處理程序收到wx.grid.GridEvent
,其中包含屬性Col
,其中包含已移動列的舊索引。該事件似乎沒有包含任何屬性,詳細說明列已被移動到到之間。我如何解釋這一點?wxPython - wxGrid - 如何檢測哪個列在哪裏移動
2
A
回答
2
如果發生EVT_GRID_COL_MOVE
事件,GridEvent.GetCol()
返回正在移動的列的ID。列的實際位置可以通過Grid.GetColPos(colId)
獲得。然而, 有wxWidgets的2.8之間的差異和WX 2.9:
在wx 2.8
,EVT_GRID_COL_MOVE
被後發送列已被移動這將阻止你否決事件。 因此在活動期間致電GetColPos()
將返回新列的位置。
在wx 2.9
,EVT_GRID_COL_MOVE
被觸發前柱移動和否決該事件將防止柱被移動。 在活動期間調用GetColPos()
將返回列的當前位置。
該列的新位置是根據鼠標位置在內部計算的。 在python中複製代碼可能會與將來可能會破壞程序的版本衝突。
使用wx 2.9+
可以實現一種變通方法,會給你新的列位置,並允許你「否決」(或者說撤銷)的舉動:
self.Bind(wx.grid.EVT_GRID_COL_MOVE, self.OnColMove)
def OnColMove(self,evt):
colId = evt.GetCol()
colPos = self.grid.GetColPos(colId)
wx.CallAfter(self.OnColMoved,colId,colPos)
# allow the move to complete
def OnColMoved(self,colId,oldPos):
# once the move is done, GetColPos() returns the new position
newPos = self.grid.GetColPos(colId)
print colId, 'from', oldPos, 'to', newPos
undo = False
if undo: # undo the move (as if the event was veto'd)
self.grid.SetColPos(colId,oldPos)
注意SetColPos
會如果此舉必須撤消(一次在內部,第二次在OnColMoved
),則調用兩次。您也可以查看wx.lib.gridmovers
。
相關問題
- 1. 如何檢測精靈在哪個方向移動?
- 2. wxgrid,檢測滾動事件
- 3. 檢測我的網站在哪裏iframed
- 4. 在哪裏做碰撞檢測
- 5. 檢測Mixin包含在哪裏
- 6. 碰撞檢測代碼在哪裏?
- 7. Java - 在哪裏檢測並捕獲SocketException
- 8. 檢測哪個滾動條隨輪子事件移動
- 9. 移動mediawiki時的圖像在哪裏
- 10. 如何檢測哪個UILabel被竊聽?
- 11. 如何檢測觸摸哪個視圖?
- 12. 如何檢測哪個div被拖拽
- 13. 如何檢測哪個博客API
- 14. WordPress管理檢測如何/在哪裏菜單被渲染/從
- 15. 在哪裏把uiautomator測試
- 16. 檢測哪個按鈕從陣列
- 17. 檢測更改事件來自哪裏
- 18. 檢測哪個事件結束活動
- 19. 檢測哪個控件是活動的
- 20. 在哪裏把USB閃存驅動器檢測WPF,MVVM
- 21. 查詢檢查在哪裏
- 22. 如何在哪裏使用計算列?
- 23. 如何知道文件在哪裏移動? MVC 4
- 24. javascript - 檢測哪個視圖?
- 25. 移動到哪裏CTS:搜索
- 26. HttpClient的LocalTestServer移動到哪裏?
- 27. 從哪裏開始? (移動開發)
- 28. 我可以在哪裏啓動陣列?
- 29. 在哪裏檢查任何結果
- 30. 如何檢查完成哪個活動
+1難以置信的好答案。當我有機會嘗試時,我會進一步評論。 – Hubro