如何修复 wxpython 事件调用?

在这里插入图片描述

1、问题背景

在使用 wxpython 开发 GUI 时,遇到了一个问题。当鼠标悬停在 BitmapButton 上时,会同时调用两个事件:

  • self.Bind(wx.EVT_LEAVE_WINDOW, self.onPanelMouseLeave)
  • self.Bind(wx.EVT_ENTER_WINDOW, self.onPanelMouseOver)

这导致了程序出现不必要的重复调用,从而产生了不期望的行为。

2、解决方案

根据答案1中的建议,问题的原因在于隐藏和显示位图时,鼠标会离开面板,从而触发 onPanelMouseLeave 事件。因此,我们只需要在 onPanelMouseLeave 事件中注释掉 self.pluginClose.Hide() 语句,即可避免重复调用事件。

修改后的代码如下:

import wxclass Plugin(wx.Panel):def __init__(self, parent, *args, **kwargs):panel = wx.Panel.__init__(self, parent, *args, **kwargs)self.colorOver = ((89,89,89))self.colorLeave = ((110,110,110))self.colorFont = ((145,145,145))self.SetBackgroundColour(self.colorLeave)self.SetForegroundColour(self.colorLeave)self.name = "Plugin"self.overPanel = 0self.overLabel = 0self.overButton = 0sizer = wx.BoxSizer(wx.VERTICAL)self.pluginName = wx.StaticText(self, -1, ' ' + self.getName())self.pluginClose = wx.BitmapButton(self, -1, wx.Bitmap('C:\Users\André Ferreira\Desktop\Tese\Código Python\SoundLog\Images\close.png'), style=wx.NO_BORDER)self.pluginClose.Hide()gs = wx.GridSizer(2, 2, 0, 0)gs.AddMany([(self.pluginName, 0, wx.ALIGN_LEFT), (self.pluginClose, 0, wx.ALIGN_RIGHT|wx.CENTER)])sizer.Add(gs, 1, wx.EXPAND)self.SetSizer(sizer)self.pluginName.Bind(wx.EVT_LEAVE_WINDOW, self.onLabelMouseLeave)self.pluginName.Bind(wx.EVT_ENTER_WINDOW, self.onLabelMouseOver)self.pluginClose.Bind(wx.EVT_BUTTON, self.onCloseMouseClick)self.Bind(wx.EVT_LEAVE_WINDOW, self.onPanelMouseLeave)self.Bind(wx.EVT_ENTER_WINDOW, self.onPanelMouseOver)def onPanelMouseOver(self, event):self.overPanel = 1self.overLabel = 0self.SetBackgroundColour(self.colorOver)self.pluginName.SetForegroundColour(self.colorFont)self.Refresh()self.pluginClose.Show()def onPanelMouseLeave(self, event):# Comment out this line to fix the issue# self.pluginClose.Hide()if self.overLabel == 0:self.overPanel = 0self.SetBackgroundColour(self.colorLeave)self.pluginName.SetForegroundColour(self.colorLeave)self.Refresh()def onLabelMouseOver(self, event):self.overPanel = 0self.overLabel = 1self.SetBackgroundColour(self.colorOver)self.pluginName.SetForegroundColour(self.colorFont)self.Refresh()self.pluginClose.Show()def onLabelMouseLeave(self, event):if self.overPanel == 0:self.overLabel = 0self.SetBackgroundColour(self.colorLeave)self.pluginName.SetForegroundColour(self.colorLeave)self.Refresh()self.pluginClose.Hide()def OnClose(self, event):self.Close()app.Destroy()def onCloseMouseClick(self, event):self.Hide()def getName(self):return self.name

修改后的代码可以正常工作,当鼠标悬停在 BitmapButton 上时,只会调用 onLabelMouseOver 事件,而不会再同时调用 onPanelMouseLeaveonPanelMouseOver 事件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3225788.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

解决U盘识别不了的一个小思路

我的U盘在自己在其他地方能正常使用,但是到了自己电脑突然就用不了了,其他设备也同样在自己电脑可以正常读写。 看了经验贴,大多是在设备管理器设置启动,但我的U盘明显不是这个问题。后面我看到一个贴子上的一个评论,想…

MQ四兄弟:如何保证消息顺序性

在当今的分布式系统架构中,消息队列(MQ)是不可或缺的组成部分。它们在确保系统组件之间高效通信方面发挥着关键作用。特别是在金融交易、物流跟踪等对消息处理顺序有严格要求的场景中,消息队列的顺序性保证显得更为重要。接下来&a…

本地电脑连接FTP服务器,显示无权限连接?

问题: 打开文档,在这一栏输入ftp服务器地址,按下回车,弹出无权限提示。 解决方案: 1、系统设置——网络和Internet——网络和共享中心 2、Internet选项 3、高级——取消“使用被动FTP”的勾选

@RequestBody注解的使用及源码解析

前言 RequestBody 注解是我们进行JavaEE开发,最常见的几个注解之一,这篇博文我们以案例和源码相结合,帮助大家更好的了解 RequestBody 注解 使用案例 1.自定义实体类 Data NoArgsConstructor AllArgsConstructor public class User {priv…

如何判断一个js对象为数组类型

如何判断一个js对象为数组类型? 能想到的最常见的intanceof是吗?开始是这么认为,但是不是哈,看下面的解释,也没有太明白,暂且记住吧 综上,判断js对象为数组的两种方式 Array.isArray([]) // trueObject.prototype.toString.call([]) ‘[object Array]’ //true

Oracle基础以及一些‘方言’(一)

1、什么是Oracle ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。 ORACLE 数据库是目前世界…

CSDN回顾与前行:我的创作之旅——2048天的技术成长与感悟

CSDN回顾与前行:我的创作之旅——2048天的技术成长与感悟 💖The Begin💖点点关注,收藏不迷路💖 前言 时光荏苒,岁月如梭。转眼间,从我在CSDN上写下第一篇技术博客《2-6 带头结点的链式表操作集…

从头开始学习扩散模型 Stable Diffusion

今天我们来揭开 Stable Diffusion 技术的神秘面纱。 1.稳定扩散原理 Stable Diffusion 在2022年发表,一种基于Latent Diffusion Models的新兴机器学习技术。它基于扩散过程,利用数学模型将机器学习中的高维度数据降低到低维度空间,并在该空间…

安卓 无线投屏 sink端 RTSP报 “505 RTSP Version not supported“

最近做安卓无线投屏的sink端,自己手搓RTSP协议,自己手搓容易出错,然后报了上面505,这个RTSP文档的意思是版本不一致,但是出现 "505 RTSP Version not supported"不一定是版本不一致,可能是 消息错…

AI究竟是在帮助开发者还是取代他们?来看大佬的观点你就明白了

AI(人工智能)在现代社会中扮演着越来越重要的角色,其在软件开发领域的应用也日益广泛。关于AI是在帮助开发者还是取代他们,V 哥个人认为,一半一半吧,为什么这么说,先不用噴,我们需要…

一个使用Go语言和现代Web技术构建跨平台桌面应用程序开源项目

大家好,今天给大家分享一个使用Go语言和现代Web技术构建跨平台桌面应用程序开源项目Wails。 Wails是一个允许开发者使用Go和Web技术编写桌面应用程序的项目。 它被设计为Go的快速且轻量的Electron替代品,旨在提供一个平台,让开发者可以利用Go…

excel PivotTable 透视表

开发数据导出excel功能,设置导出透视表 数据源: 透视表: 使用插件EPPlus 数据源: IF OBJECT_ID(tempdb..#temptable) IS NOT NULLDROP TABLE #temptable; CREATE TABLE #temptable ( [PROJECT] varchar(50), [PRODUCT_CODE] var…

Java NIO合并多个文件

NIO API java.nio (Java Platform SE 8 ) 直接上代码 package com.phil.aoplog.util;import lombok.extern.slf4j.Slf4j;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel;Slf4j public…

深入剖析C++的 “属性“(Attribute specifier sequence)

引言 在阅读开源项目源代码是,发现了一个有趣且特殊的C特性:属性。 属性(attribute specifier sequences)是在C11标准引入的。在C11之前,编译器特有的扩展被广泛用来提供额外的代码信息。例如,GNU编译器&…

无菌隔离器内操作规范性的验证之气流流型验证-北京中邦兴业

无菌隔离器在制药行业的使用愈加广泛,但已有的研究更多地聚焦于设计布局、物料状态等方面,对人员操作因素的影响方面关注较少。以冻干制剂生产车间为例,设计了一系列合理的无菌隔离器内干预操作,并在操作人员实行干预操作的基础上…

面试题 21:解释 Python 中的 help() 函数和 dir() 函数?

欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

8.6结构体函数参数

代码 #include <iostream> using namespace std; #include <string>//结构体函数参数//定义学生结构体 struct student {string name;int age;int score; };//打印学生信息的函数 //1、值传递 void printStudent1(struct student s) {cout << "子函数1…

如何查看GD32 Keil和IAR工程的map文件

我们在设计调试程序时&#xff0c;往往需要知道一个函数或一个变量它在MCU中具体所在的地址以及所占用的空间大小&#xff0c;这时候就需要查看map文件。 那么什么是map文件呢&#xff1f;map文件是编译器编译工程后生成的一个文件&#xff0c;文件会有很多信息&#xff0c;比…

小米恢复联系人,跟着这2个步骤,让你的社交重回巅峰

当你突然发现小米手机里的联系人列表变得空空如也&#xff0c;是不是感觉就像失去了与外界沟通的“秘密武器”&#xff1f;别担心&#xff0c;这并不意味着你真的失去了他们。他们可能只是藏在了手机里的某个神秘角落&#xff0c;等待着你的召唤。接下来&#xff0c;小编将会介…