문제

STATICBITMAP에서 호버 효과를 만들고 싶습니다. 마우스 커서가 비트 맵 위에 있으면 하나의 이미지가 표시되지 않으면 두 번째 이미지를 보여줍니다. 사소한 프로그램입니다 (버튼과 완벽하게 작동). 그러나 STATICBITMAP는 EVT_WINDOW_ENTER, EVT_WINDOW_LEAVE 이벤트를 방출하지 않습니다.

EVT_Motion과 함께 일할 수 있습니다. 커서가 이미지의 가장자리에있을 때 이미지가 전환되면 스위치가 작동하지 않습니다. (주로 가장자리 위로 빠르게 움직이면서).

예제 코드 :

#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx

def onWindow(event):
    print "window event:", event.m_x, event.m_y

def onMotion(event):
    print "motion event:", event.m_x, event.m_y

app = wx.App()

imageA = wx.Image("b.gif", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
imageB = wx.Image("a.gif", wx.BITMAP_TYPE_ANY).ConvertToBitmap()

frame = wx.Frame(None, wx.ID_ANY, title="Hover effect", size=(100+imageA.GetWidth(), 100+imageA.GetHeight()))

w = wx.Window(frame)
bmp = wx.StaticBitmap(w, -1, imageA, (50, 50), (imageA.GetWidth(), imageA.GetHeight()))
bmp.Bind(wx.EVT_MOTION, onMotion) 
bmp.Bind(wx.EVT_ENTER_WINDOW, onWindow)
bmp.Bind(wx.EVT_LEAVE_WINDOW, onWindow)

frame.Show()
app.MainLoop()
도움이 되었습니까?

해결책

이것은 WXGTK 버그 인 것 같습니다. 입력하고 이벤트가 Windows에서 잘 작동합니다. 당신은 핵심 개발자의 관심을 문제로 지시해야합니다. 이것을하기에 좋은 곳은 그들의 것입니다. 버그 추적기. 이것은 IMHO를 중심으로 일할 필요가없는 문제입니다.

제네릭 부트가 WXGTK 에서이 문제가 없다는 것을 알았으므로 STATICBITMAP가 수정 될 때까지 사용할 수 있습니다.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx
from wx.lib import buttons

def onWindow(event):
    print "window event:", event.m_x, event.m_y

def onMotion(event):
    print "motion event:", event.m_x, event.m_y

app = wx.App()

imageA = wx.Image("b.gif", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
imageB = wx.Image("a.gif", wx.BITMAP_TYPE_ANY).ConvertToBitmap()

frame = wx.Frame(None, wx.ID_ANY, title="Hover effect", size=(100+imageA.GetWidth(), 100+imageA.GetHeight()))

w = wx.Window(frame)
#bmp = wx.StaticBitmap(w, -1, imageA, (50, 50), (imageA.GetWidth(), imageA.GetHeight()))
bmp = buttons.GenBitmapButton(w, -1, imageA, style=wx.BORDER_NONE)
#bmp.Bind(wx.EVT_MOTION, onMotion)
bmp.Bind(wx.EVT_ENTER_WINDOW, onWindow)
bmp.Bind(wx.EVT_LEAVE_WINDOW, onWindow)

frame.Show()
app.MainLoop()

다른 팁

WXSTATICBYMAP 구현에는 버그가있을 수 있지만 WXBITMAPBUTTON이 작동하면 코드가 적고 동일한 효과에 사용할 수 있습니다.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx

app = wx.App()

frame = wx.Frame(None, wx.ID_ANY, title="Hover effect")
w = wx.Window(frame)
c = wx.BitmapButton(w, -1, wx.EmptyBitmap(25,25), style = wx.NO_BORDER)
c.SetBitmapHover(wx.EmptyBitmap(3,3))
frame.Show()

app.MainLoop()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top