wxpython skin bug(staticbox背景绘制)

超全!Python图形界面框架PyQt5使用指南! Pyside6:Pyside是QT公司官方提供的Python包,上一版本为Pyside2,对应的是QT5,最新版命名规则进行了调整,更改为Pyside6,对应的是QT6版本。将刚才编写的PyQt5的代码(demo.py和Weather.py)拖到src/main/python文件夹下,删除原有的main.py,并将demo.py修改为main.py。Tkinter:Python内置的GUI框架,使用TCL实现,Python中内嵌了TCL解释器,使用它的时候不用安装额外的扩展包,直接import,跨平台。.. 阅读详情

用了皮肤bug真多,staticbox 不能用,背景成了透明的,而且拖动大小后背景不会刷新。成了下面的效果惊恐


还好手头有源代码,只有慢慢看源码,找原因了。

bool wxStaticBox::Create(wxWindow *parent,
                         wxWindowID id,
                         const wxString& label,
                         const wxPoint& pos,
                         const wxSize& size,
                         long style,
                         const wxString& name)
{
    if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) )
        return false;

    if ( !MSWCreateControl(wxT("BUTTON"), label, pos, size) )
        return false;

    // Always use LTR layout. Otherwise, the label would be mirrored.
    SetLayoutDirection(wxLayout_LeftToRight);

#ifndef __WXWINCE__
    if (!wxSystemOptions::IsFalse(wxT("msw.staticbox.optimized-paint")))
        Connect(wxEVT_PAINT, wxPaintEventHandler(wxStaticBox::OnPaint));
#endif // !__WXWINCE__

    return true;
}
staticbox的创建函数,OnPaint是protected的,python代码好像没法调用

在OnPaint处打上断点,发现加载皮肤库没有进入,估计是SkinSharp内置的消息钩子处理了PAINT消息,导致

OnPaint事件无效。。。。。。。。。

// all the hacks below are not necessary for WinCE
#ifndef __WXWINCE__

WXLRESULT wxStaticBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
    if ( nMsg == WM_NCHITTEST )
    {
        // This code breaks some other processing such as enter/leave tracking
        // so it's off by default.

        static int s_useHTClient = -1;
        if (s_useHTClient == -1)
            s_useHTClient = wxSystemOptions::GetOptionInt(wxT("msw.staticbox.htclient"));
        if (s_useHTClient == 1)
        {
            int xPos = GET_X_LPARAM(lParam);
            int yPos = GET_Y_LPARAM(lParam);

            ScreenToClient(&xPos, &yPos);

            // Make sure you can drag by the top of the groupbox, but let
            // other (enclosed) controls get mouse events also
            if ( yPos < 10 )
                return (long)HTCLIENT;
        }
    }

    if ( nMsg == WM_PRINTCLIENT )
    {
        // we have to process WM_PRINTCLIENT ourselves as otherwise child
        // windows' background (eg buttons in radio box) would never be drawn
        // unless we have a parent with non default background

        // so check first if we have one
        if ( !HandlePrintClient((WXHDC)wParam) )
        {
            // no, we don't, erase the background ourselves
            // (don't use our own) - see PaintBackground for explanation
            wxBrush brush(GetParent()->GetBackgroundColour());
            wxFillRect(GetHwnd(), (HDC)wParam, GetHbrushOf(brush));
        }

        return 0;
    }

    if ( nMsg == WM_UPDATEUISTATE )
    {
        // DefWindowProc() redraws just the static box text when it gets this
        // message and it does it using the standard (blue in standard theme)
        // colour and not our own label colour that we use in PaintForeground()
        // resulting in the label mysteriously changing the colour when e.g.
        // "Alt" is pressed anywhere in the window, see #12497.
        //
        // To avoid this we simply refresh the window forcing our own code
        // redrawing the label in the correct colour to be called. This is
        // inefficient but there doesn't seem to be anything else we can do.
        //
        // Notice that the problem is XP-specific and doesn't arise under later
        // systems.
        if ( m_hasFgCol && wxGetWinVersion() == wxWinVersion_XP )
            Refresh();
    }

	//xugangjava add this
	if (nMsg==WM_NCPAINT)
	{
		OnPaint(wxPaintEvent());
	}
	//xugangjava add this

    return wxControl::MSWWindowProc(nMsg, wParam, lParam);
}

staticbox下面还有这样一个函数,hook本地消息的,只有试一下看了,拦截WM_NCPAINT

调用OnPaint,Ok 编译替换[wxmsw294u_core_vc90.dll]文件

运行代码,一切正常,



python软件界面开发框架,python应用程序界面 使用Python开发图形界面的软件其实并不多,相对于GUI界面,可能Web方式的应用更受人欢迎。但对于像我一样对其他编程语言比如C#或WPF并不熟悉的人来说,未必不是一个好的工具python画笑脸的源代码。PyQt是Qt框架的Python语言实现,由Riverbank Computing开发,是最强大的GUI库之一。PyQt提供了一个设计良好的窗口控件集合,每一个PyQt控件都对应一个Qt控件,因此PyQt的API接口与Qt的API接口很接近,但PyQt不再使用QMake系统和Q_OBJECT宏。 阅读详情

相关推荐

Python桌面应用程序中的界面美化与定制

通过选择合适的GUI框架、使用自定义样式表、定制主题颜色以及使用自定义控件和小部件等方式,可以为应用程序添加一个美观、易用的用户界面。这些自定义控件和小部件可以与框架提供的控件和小部件无缝集成,从而扩展应用程序的功能和外观。可以使用框架提供的布局管理器(如PyQt中的QVBoxLayout和QHBoxLayout)来自动对齐UI元素,也可以手动指定UI元素的位置和大小。在布局和对齐时,应该遵循一定的设计原则,如对称性、平衡性和一致性,以便用户更容易理解界面和交互。在选择字体时,应该考虑其易读性和可访问性。

吃不胖. 1368

wxpython skin bug(弹出菜单,内存错误)

前面说到了 wxpython skin的问题(使用皮肤后弹出目录,程序崩溃) http://blog.youkuaiyun.com/xugangjava/article/details/7763212 使用OllyDbg 调试 发现在wxwindow中的 handlermenuchar 报错了,非法的地址访问, 一下也看不出来是为什么,还好wxpython是开源的,网上下载源码。 我下载的

xugangjava的专栏 1484

GroupBox分组框详解及Python示例代码

GroupBox是一种常用的容器类部件,用于将相关的部件组织在一起,并提供视觉上的分组效果。GroupBox(分组框)是一种常见的容器类部件,用于将其他相关的部件组织在一起并提供视觉上的分组效果。GroupBox可以通过Frame部件实现,我们可以使用Frame的relief参数来设置分组框的边框样式,常见的样式包括FLAT、RAISED、SUNKEN、GROOVE和RIDGE。例如,在一个应用程序的设置界面中,我们可以使用GroupBox将相关的选项分组,使用户可以更方便地浏览和修改这些选项。

ByteHero的博客 562

wxpython漂亮gui界面模板下载_Py之wxPython:利用wxPython设计GUI界面(图片背景+简单按钮)...

Py之wxPython:利用wxPython设计GUI界面(图片背景+简单按钮)实现界面实现代码import wxclass MyPanel(wx.Panel):def __init__(self, parent, id):wx.Panel.__init__(self, parent, id)try:image_file = 'F:/File_Python/Python_GUI/Talking W...

weixin_39603598的博客 1281

使用wxPython设置主窗口的背景图片

在使用wxPython创建GUI应用程序时,我们经常需要自定义窗口的外观,其中一个常见需求是设置窗口的背景图片。本文将介绍如何使用wxPython库在主窗口中设置背景图片,并提供相应的源代码。你可以根据自己的需求,调整窗口的大小、添加其他控件等。在这个示例中,我们假设背景图片文件名为"background.jpg",你可以将其替换为你自己的图片文件名。类的构造函数中,我们首先调用父类的构造函数来初始化窗口的基本属性,例如标题和大小。运行上述代码,你将会看到一个带有背景图片的主窗口显示出来。

TechNovaX的博客 414

常用本体建模工具

常用本体建模工具: Apollo、OntoStudio、TopBraid Composer、Semantic Turkey、Knoodl、Chimaera、OliEd、WebODE、Kmgen和DOME Protégé Protégé[1]是一款由斯坦福大学编写并维护的开源本体建模和编辑工具,其支持Web版本和PC版本,使用OWL语言(关于OWL的详细介绍可参看前文2.1节内容)对知识进行表示,读者可以通过Protégé的官方网站访问Web版本或下载桌面版本。Protégé最早开发于1987年,最初目的是

qq_40503347的博客 6158

WxPython(五) -- StaticBox,下拉框ComboBox,文件选择框FileDialog以及消息对话框MessageDialog

StaticBox 在wxPython中,StaticBox提供了盒子周围的边框以及顶部的标签,等同于wx.BoxSizer,不一样的地方就在于多了个边框以及顶部的标签 使用教程: 创建一个wx.StaticBox对象。 使用上面的静态框作为参数声明一个wx.StaticBoxSizer。 创建控件并添加staticbox sizer。 将其设置为框架的sizer # 创建一个wx.BoxSizer对象。 LogSizer = wx.BoxSizer() .

你的外祖父的博客 3254

深入解析FDTD Script中的farfieldpolar3d命令:复电场计算与应用

本文深入解析了FDTD仿真中`farfieldpolar3d`命令的核心功能与应用。作为`farfield3d`的复数版本,该命令能计算并返回球坐标系下的复电场矢量,完整保留振幅与相位信息,为光学天线设计、近远场变换及偏振态分析等高级应用提供了关键数据基础。

grafana6viz的博客 286

python gui 之 wxPython的样式

在 wxPython 中,设置 widget 的颜色、圆角、边框等样式通常涉及使用特定的方法和属性。

nujnus9221的博客 1179

传感器:MQ-5燃气模块测量燃气值(底部附代码)

本篇文章介绍使用MQ-5燃气模块测量燃气值,CPU还是选择单片机,MQ-5主要使用的技术为ADC,燃气对于单片机来说是模拟信号,需要转换为数字信号,再经过相关计算公式将燃气模拟值转换成对应的燃气数值,便于人们方便查看。例如家庭使用燃气模块测量燃气值,如果燃气值超过一定的范围,可以外设一个报警装置,保证家庭的生命安全。(1)ADC(analog to digital converter)即模数转换器,它可以将模拟信号转换为数字信号。按照其转换原理主要分为逐次逼近型、双积分型、电压频率转换型三种。STM32F1

Mr_zhang1911116的博客 1万+

matlab液体湿润模拟,【水文模型】01 三水源新安江模型

目录一、概述1.1 流域概况1.2 产流方式论证1.3 设计基本任务1.4 设计原始资料二、新安江模型2.1 流域划分2.2 产汇流计算2.2.1 蒸散发计算2.2.2 产流计算2.2.3 水源划分2.2.4 汇流计算2.3 模型参数2.3.1 参数物理意义2.3.2 参数率定结果2.4 模拟结果2.4.1 精度统计表2.4.2 计算与实测流量过程线比较三、精度统计与误差分析3.1 精度统计3.2...

weixin_34173656的博客 5327

用wxpython做ui_wxpython gui美化方案?

看到问题的所有回答以及楼主和@Sunny的互动以及楼主分享的代码,感觉知乎上好凄凉啊!最近刚转到python,了解使用了tkiner和wxpython,个人感觉无论tkiner和wxpython做ui确实太弱了,ui的可控性和稳定性甚至连java的swing都不如,了解期间竟然还被我这样的python初级开发者找出模块一个bug(与wxpython有关但不是wxpython的,不过wxpython...

weixin_39827585的博客 605

从拆解到调试:用CS5523改造旧款车载显示屏的完整记录(MIPI转eDP方案)

本文详细记录了使用CS5523芯片将旧款车载显示屏从MIPI接口改造为eDP驱动的完整过程。通过对比LT8911等芯片,选择CS5523实现低功耗、高兼容性的显示升级,涵盖硬件改造、固件配置及调试技巧,最终成功提升显示效果200%。

web99的专栏 343

wxpython 优秀的界面_好用的 wxPython 界面設計工具 — wxFormBuilder

在測試過程中,我們常常透過終端機執行指令,來完成一些事情。這些常用的指令,久了可能會忘,我們可以提供一個整合的介面,方便大家使用。另外,現有自動化測試已經包含了一連串的 test case。有時我們不需要跑一整套,只需要跑部分的 test case。這時如果有一個介面可以方便提供勾選,指定要執行的 test case,會方便很多。除此之外,測試結果可以直接匯總後顯示在 UI 介面上,會比較直覺。基...

weixin_39716043的博客 532

CANoe软件之离线报文回放与分析实战

本文详细介绍了如何使用CANoe软件进行离线报文回放与分析,帮助工程师将现场故障数据转化为可反复研究的实验室资源。通过实战步骤,指导如何搭建分析工程、加载DBC文件解码信号,并利用Trace和Graphics窗口进行深度数据筛选与图形化分析,从而高效定位汽车电子故障,是提升诊断效率的关键技能。

weixin_29227585的博客 527

华为OD机试真题 新系统 2026-04-19 Java&Go 实现【分辨率排序】

华为OD机试真题 新系统 2026-04-19 Python&JS 实现【分辨率排序】

MISAYAONE的博客 302

实战wxPython:031 - 基本控件之静态控件

wxPython提供了一些常用的静态控件包括静态文本控件wx.StaticText,静态图片控件wx.StaticBitmap,静态分割线wx.StaticLine,静态框控件wx.StaticBox,以及进度显示条控件wx.Gauge等。注意,为了获得最佳效果,如果没有显式地调整大小,则默认情况是控件的大小应该与其中显示的图像的大小相同。这个控件可以有两种使用方式,一种是作为兄弟窗口环绕在其他控件周围,一种是将其作为父窗口,它所包围的控件作为其字窗口放在其中。图4:wx.StaticBitmap演示。

seniorwizard的专栏 1761

YOLO11涨点优化:创新多尺度卷积注意力(MSCA)模块,小目标检测神器!

MSCA模块通过创新的多尺度设计,在保持计算效率的同时显著提升小目标检测能力。实验证明,在YOLOv5/v8等模型上嵌入MSCA后,mAP提升超过2%,小目标检测精度提升近4%,且计算代价增加极小。注意力机制的未来发展方向动态核尺寸:根据输入特征自适应调整卷积核大小跨模态融合:结合RGB与深度/热力图等多模态信息自监督优化:利用对比学习预训练注意力模块尝试在你的YOLO模型中插入MSCA模块,欢迎在评论区分享你的涨点结果!参考文献。

QQ_778132974的博客 470

wxpython skin sharp的问题

wxpython使用 Skin Sharp 皮肤后一切正常 但是 在弹出目录的 同时点击键盘按键 程序出现 memory不能为written错误 ????

xugangjava的专栏 2017

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

wxpython多界面_【Python】 用户图形界面GUI wxpython III 更多组件

wxpython - 更多组件我写到的这些组件可能一来不是很详细,二来不是最全的,想要更好地用这些组件,应该还是去看看教程和别的示例。比较简单的,推荐http://download.youkuaiyun.com/album/detail/459 辛星wpython教程■  复选框 CheckBox复选框需要对每个单独的选项构建,常用的构造方法是:CheckBox(parent,id,label,pos,siz...

weixin_39616686的博客 202

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

wxPython学习(5.布局管理)

布局管理 使用绝对布局会有以下问题: 1.子窗口(或控件)位置和大小不会随着父窗口的变化而变化 2.在不同平台上显示效果可能差别很大 3.在不同分辨率下显示效果可能差别很大 4.字体的变化也会对显示效果有影响 5.动态添加或删除子窗口(或控件)界面布局需要重新设计 wxPython提供了8个布局管理器类: 1.Box布局管理器(默认水平布局) 创建wx.BoxSizer对象时可以...

qq_35634418的博客 5133

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

wxpython静态文本框_wxpython 学习之 --文本框与Boxsizer布局管理器

defInitLpanel(self):self.lpanel.SetBackgroundColour('#AABBCC')LBox= wx.BoxSizer(wx.VERTICAL) #创建左面板的整体布局管理器,为竖直方向nm_staticbox= wx.StaticBox(self.lpanel,-1,'Account:') #创建Account staticboxnm_sizer = wx...

weixin_39979245的博客 326

Python图形用户界面之布局入门。

wxPython布局主要有四种布局方式: Box布局 StaticBox布局 Grid布局 FlexGrid布局 Box布局主要方法: wx.BoxSizer --布局器类。 wx.BoxSizer() --创建对象可以指定布局方向,默认是水平。 wx.HORIZONTAL--水平方向布局。 wx.VERTICAL--垂...

Liuxm 1460

第18天 | 25天学会wxPython,静态组件

静态组件没有很多个,有用于显示文本的wx.StaticText,显示一条直线的wx.StaticLine,有为其他组件加上一个矩形外框和标题的wx.StaticBox,有用于展示图片的wx.StaticBitmap,应用代码,如下所示: 程序清单:static.py import wx # 继承Frame class StaticControl(wx.Frame): count_text = None count = 0 def __init__(self, *args,

老陈说编程 哔哩哔哩 437

wxpython多界面_wxpython笔记:wxpython的界面布局方式(一)

wxpython的五种布局方式:Grid:一个十分基础的网格布局。当你要放置的窗口部件都是同样的尺寸且整齐地放入一个规则的网格中是使用它。Flex grid:对grid sizer稍微做了些改变,当窗口部件有不同的尺寸时,可以有更好的结果。Grid bag:grid sizer系列中最灵活的成员。使得网格中的窗口部件可以更随意的放置。Box:在一条水平或垂直线上的窗口部件的布局。当尺寸改变时,在控...

weixin_39787606的博客 796
上一篇: Windows Message Codes
下一篇: wxpython 封装listctrl 支持添加控件
xugangjava
博客等级 码龄16年 83粉丝 72原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值