2016-02-21 4 views
0

Как я могу изменить курсор мыши на определенный виджет на моем wx.Panel?Изменение указателя мыши на виджет

В следующем примере я хочу, чтобы курсор изменился на ручку, когда она закончилась bmp2, изображение в правом верхнем углу, но оно остается стрелкой. Мне любопытно также, что если я заменил bmp2.SetCursor на bmp4.SetCursor, то вдруг курсор будет рукой всюду.

import wx 

class Example(wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__(self, parent) 

     self.panel = wx.Panel(self) 

     gs = wx.GridSizer(2, 2, 5, 5) 

     bmp1 = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.EmptyBitmap(150, 150)) 
     bmp2 = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.EmptyBitmap(150, 150)) 
     bmp3 = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.EmptyBitmap(150, 150)) 
     bmp4 = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.EmptyBitmap(150, 150)) 

     gs.Add(bmp1, 0, wx.EXPAND) 
     gs.Add(bmp2, 0, wx.EXPAND) 
     gs.Add(bmp3, 0, wx.EXPAND) 
     gs.Add(bmp4, 0, wx.EXPAND) 

     bmp2.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) 

     self.panel.SetSizer(gs) 
     gs.Fit(self) 

if __name__ == '__main__': 
    app = wx.App() 
    Example(None).Show() 
    app.MainLoop() 
+0

Вы пробовали ловить 'EVT_ENTER_WINDOW' и' EVT_LEAVE_WINDOW' события на 'bmp2' и установив курсор через что? – dpwilson

+0

После того, как вы проверили свой код, мой курсор меняется на руку, когда над 'bmp2'. Какие версии ОС/wxPython вы используете? – dpwilson

+0

@dpwilson Я на Ubuntu Linux с версией wxpython 2.8.12.1 (gtk2-unicode). Для использования событий ввода/выхода мне все равно придется найти надежный способ установки курсора в целом. Тот факт, что он работает для 'bmp4.SetCursor', но не для' self.SetCursor' и 'self.panel.SetCursor' (по крайней мере, в моей системе), делает это запутанным для меня. – matec

ответ

0

Наконец-то я понял, что я могу избежать этой проблемы на моей платформе (Linux), обернув каждый виджет в свою собственную панель.

Заменить восемь линий, которые создают статические растровые изображения и добавить их к сетке классификатору по:

p1 = wx.Panel(self.panel) 
    p2 = wx.Panel(self.panel) 
    p3 = wx.Panel(self.panel) 
    p4 = wx.Panel(self.panel) 
    bmp1 = wx.StaticBitmap(p1, wx.ID_ANY, wx.EmptyBitmap(150, 150)) 
    bmp2 = wx.StaticBitmap(p2, wx.ID_ANY, wx.EmptyBitmap(150, 150)) 
    bmp3 = wx.StaticBitmap(p3, wx.ID_ANY, wx.EmptyBitmap(150, 150)) 
    bmp4 = wx.StaticBitmap(p4, wx.ID_ANY, wx.EmptyBitmap(150, 150)) 

    gs.Add(p1, 0, wx.EXPAND) 
    gs.Add(p2, 0, wx.EXPAND) 
    gs.Add(p3, 0, wx.EXPAND) 
    gs.Add(p4, 0, wx.EXPAND) 
Смежные вопросы