gpt4 book ai didi

python - 如何在 wxpython 中的 StaticBitmap 上创建悬停效果?

转载 作者:太空宇宙 更新时间:2023-11-03 11:57:39 24 4
gpt4 key购买 nike

我想在 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 错误,ENTER 和 LEAVE 事件在 Windows 上工作正常。您应该将核心开发人员的注意力引导到问题上,这样做的好地方是他们的 bug tracker .恕我直言,您不必解决这个问题。

我发现 GenericButtons 在 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()

关于python - 如何在 wxpython 中的 StaticBitmap 上创建悬停效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1415727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com