Я пытаюсь использовать решение Майка Дрисколла для создания всплывающих подсказок в сетке wxPython, как описано здесь: http://www.blog.pythonlibrary.org/2010/04/04/wxpython-grid-tips-and-tricks/. Вот мой минимальный пример.
import wx
import wx.grid
class GridFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY)
self.panel = wx.Panel(self)
self.InitUI()
def InitUI(self):
hbox = wx.BoxSizer(wx.HORIZONTAL)
self.grid = wx.grid.Grid(self, -1)
self.grid.ClearGrid()
self.grid.CreateGrid(10, 5)
self.grid.AutoSize()
self.grid.GetGridWindow().Bind(wx.EVT_MOTION, lambda event: self.onMouseOver(event, self.grid))
hbox.Add(self.grid, flag=wx.ALL, border=10)
self.panel.SetSizer(hbox)
hbox.Fit(self)
self.Centre()
self.Show()
def onMouseOver(self, event, grid):
"""
Displays a tooltip over any cell in a certain column
"""
x, y = grid.CalcUnscrolledPosition(event.GetX(),event.GetY())
coords = grid.XYToCell(x, y)
col = coords[1]
row = coords[0]
if col == 1:
msg = "This is Row %s, Column %s!" % (row, col)
print msg
event.GetEventObject().SetToolTipString(msg)
else:
event.GetEventObject().SetToolTipString('')
if __name__ == "__main__":
app = wx.PySimpleApp(redirect=False)
app.frame = GridFrame()
app.frame.Show()
app.frame.Center()
app.MainLoop()
Подсказка просто не отображается. Оператор печати работает так, как ожидалось, поэтому я знаю, что привязка сработала, и событие перехватывается. Я предполагаю, что мне не хватает чего-то простого - может быть, мне нужно где-то инициализировать всплывающую подсказку? - но я не уверен, что. Есть идеи?
Обновлять:
Проблема, похоже, в сочетании версии wxPython и платформы. Код работает, как и ожидалось, в Windows с wxPython 2.8.10.1. Он не работает на Mac с 2.9.2.4, но успешно с 3.0.2.0. В общем, нам нужно, чтобы пользователи нашего графического интерфейса установили дистрибутив Python Enthought Canopy, который поставляется с 2.9.2.4 (неудачная версия wxPython).
Использование event.Skip() не имеет значения.
Я подойду к этому по-другому теперь, когда я знаю, что это проблема версии wxPython.