wxPython之RendererNative

wxPython 透明组件实现三例 这几天写一个项目,需要给wxpython的部件做一下透明处理,使其能显示在有背景图片的frame上。 实现的时候,最重要是组件的 Paint 和 EraseBackground 事件。 下面代码分别实现了 ToolBar、CheckBox 和 StaticText 的透明处理。其中很重要的一点是它们的父窗体要设置成 wx.TRANSPARENT_WINDOW 样式,否则不会透明显示。win7 + python2.5 + wxPython2.8.11 测试通过class TPToolBar(wx.ToolBa 阅读详情

RendererNative

  RendererNative是一个包含一个封装了绘制原生态UI组件功能的集合。它允许在一个DC中绘制,不需要知道它是如何运行的任何细节。当需要创建保持平台自己窗口部件原生外观和感觉的通用窗口部件时,这是非常强大和有用的类。

示例演示

  定制一个按钮,使用RendererNative单实例根据鼠标的位置和状态来绘制外观,外观看起来是原生的。

#-*-coding: UTF-8 -*-
#------------------------------------------------------
#Purpose: nothing....

#Author: 阿Bin先生
#Created: 2017年5月29日
#------------------------------------------------------
import wx

class DropArrowButton(wx.PyControl):
    def __init__(self, parent, id=wx.ID_ANY,
        label="", pos=wx.DefaultPosition,
        size=wx.DefaultSize, style=0,
        validator=wx.DefaultValidator,
        name="DropArrowButton"):
        style |= wx.BORDER_NONE
        super(DropArrowButton, self).__init__(parent, id,
        pos, size,
        style,
        validator, name)
        # Attributes
        self._label = label
        self._state = 0
        # Event Handlers
        self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
        self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
        self.Bind(wx.EVT_LEAVE_WINDOW,
        lambda event:
        self.SetState(0))
        self.Bind(wx.EVT_ENTER_WINDOW,
        lambda event:
        self.SetState(wx.CONTROL_CURRENT))
        self.Bind(wx.EVT_PAINT, self.OnPaint)

    def DoGetBestSize(self):
        size = self.GetTextExtent(self._label)
        size = (size[0]+16, size[1]+16) # Drop Arrow
        size = (size[0]+8, size[1]+4) # Padding
        self.CacheBestSize(size)
        return size

    def OnLeftDown(self, event):
        """Show the drop menu"""
        self.SetState(wx.CONTROL_PRESSED)

    def OnLeftUp(self, event):
        """Send a button click event"""
        if self._state != wx.CONTROL_PRESSED:
            return
        self.SetState(wx.CONTROL_CURRENT)

    def OnPaint(self, event):
        """Draw the Conrol"""
        dc = wx.PaintDC(self)
        gc = wx.GCDC(dc) # AA text
        # Get the renderer singleton
        render = wx.RendererNative.Get()
        # Get the working rectangle we can draw in
        rect = self.GetClientRect()
        # Draw the button
        render.DrawPushButton(self, gc, rect, self._state)
        # Draw the label on the button
        lblrect = wx.Rect(rect.x+4, rect.y+2,
        rect.width-24, rect.height-4)
        gc.DrawLabel(self._label, lblrect, wx.ALIGN_CENTER)
        # Draw drop arrow
        droprect = wx.Rect((rect.x+rect.width)-20,
        rect.y+2, 16, rect.height-4)
        state = self._state
        if state != wx.CONTROL_PRESSED:
            state = wx.CONTROL_CURRENT
        render.DrawDropArrow(self, gc, droprect, state)

    def SetState(self, state):
        self._state = state
        self.Refresh()

class MyFrame(wx.Frame):
    def __init__(self, parent, *args, **kwargs):
        super(MyFrame, self).__init__(parent, *args, **kwargs)
        # Attributes
        self.Panel = wx.Panel(self)
        box = DropArrowButton(self.Panel, -1, "RendererNative", pos = [10, 10])
        box.SetSize([200, 100])

class MyApp(wx.App):
    def OnInit(self):
        self.frame = MyFrame(None, title="RendererNative",size = [500, 500])
        self.SetTopWindow(self.frame)
        self.frame.Show()
        return True

if __name__ == "__main__":
    app = MyApp(False)
    app.MainLoop()        

运行结果:

这里写图片描述

代码分析:

  在OnPaint方法中,我们得到RendererNative单实例的引用,DrawPushButton绘制一个原生的按钮,DrawLabel绘制按钮的标签,DrawDropArrow绘制按钮的右侧箭头。同时绘制时会传入控件的状态:0表示默认状态,CONTROL_CURRENT表示悬停状态,CONTROL_PRESSED表示按下状态。
绘制方法
以下是RendererNative的绘制方法。所有的方法都有相同的前四个参数:window, DC, rect和flags。
这里写图片描述
控制标记
以下标记可以作为bitmask的一部分传递给绘制方法flags参数。没有传递任何标记或者传递0给flags参数,表示控件以默认状态绘制。
这里写图片描述

这里写图片描述

gm/ID设计方法实践指南:从理论曲线到电路优化的关键步骤 本文详细介绍了gm/ID设计方法在模拟IC设计中的实践指南。该方法通过直接利用工艺模型数据,将设计焦点从盲目调整晶体管尺寸转向选择关键的gm/ID工作点,从而在先进工艺下实现功耗、增益和带宽等性能的精准权衡与优化。文章从理论曲线生成到具体电路设计步骤,提供了完整的实战流程。 阅读详情

相关推荐

Zynq裸机调试RTL8211FS网卡踩坑记:从ping不通到完美兼容的完整代码修改

本文详细记录了在Zynq平台上使用Xilinx SDK(XSDK)调试RTL8211FS网卡的完整过程,从最初的ping不通问题到最终实现完美兼容的解决方案。通过分析PHY芯片的寄存器配置差异,提供了关键代码修改和调试技巧,帮助开发者快速解决类似问题。

weixin_42550597的博客 421

[wxWidgets]_[中级]_[使用wxRendererNative画的原生图片生成带alpha透明区域的wxBitmap]

wx生成的原生checkbox图片: 场景: 1.如果要开发自定义的checkBox和radiobutton,原生的控件背景色是无法替换为父控件的背景的,这种情况只能开发自己的自定义radiobutton.如果是自定义的radiobutton,那么少不了radiobutton的图片,这时候最简单的当然是要美工制作再贴图啦,但是也有办法不需要美工制作图片,因为wx的wxRend

小白 3242

[ensp报错:USG6000V错误代码45解决方案]

[ensp报错:USG6000V:错误代码45解决] [ensp报错:USG6000V:错误代码45解决] 第一种处理方式: ensp的45错误帮助文档里的解决方法:(这里就不说了,上华为爸爸的图) ensp的45错误:如果你的45错误不是描述的那个,可能是ensp与virtualbox不兼容了。 错误描述:具体表现为在virtualbox里没有vfw_usg的条目,虚拟介质管理器里也没有相应的条目: 就是vfw_usg_vdi这个 这种情况下你把ensp卸载重装多少次都没用,原因在两个软件的兼容

weixin_45456536的博客 3万+

53、 wxWidgets之自定义wxDataViewProgressRenderer

class MyDataViewProgressRenderer: public wxDataViewProgressRenderer { public: MyDataViewProgressRenderer( const wxString &label,const wxString &varianttype, wxDataViewCellMode mode, int align ) : wxDataViewProgressRenderer( label...

sq8706的专栏 366

Qt+PCL实战:如何用QVTKOpenGLNativeWidget高效渲染3D点云(附完整代码)

本文深入解析了Qt与PCL结合使用QVTKOpenGLNativeWidget进行高效3D点云渲染的实战技术。通过对比传统QVTKWidget,详细介绍了QVTKOpenGLNativeWidget在渲染效率、内存占用和兼容性方面的显著优势,并提供了完整的代码示例和性能优化策略,助力开发者在工业检测、自动驾驶等领域实现更高效的点云可视化。

keras9composer的博客 687

从理论到实践:基于Zemax的高分辨率生物显微镜光学系统仿真与优化指南

本文详细介绍了基于Zemax的高分辨率生物显微镜光学系统仿真与优化全流程。从阿贝分辨率公式、柯勒照明等理论基础出发,逐步讲解Zemax建模、像差优化、制造可行性分析等核心步骤,并提供常见问题解决方案。通过实际案例展示如何将理论设计转化为可制造的优化方案,帮助工程师掌握从仿真到实际应用的关键技术。

weixin_29229989的博客 482

wxWidgets类列表

管理窗口这里有若干直接由窗口管理器(例如:MS Windows或Motif Window Manager)操纵的窗口类型。在wxWidgets中,frames和dialogs是相似的,但是只有dialogs可能是模式的。wxTopLevelWindow任意的顶层窗口,dialog或framewxDialog对话框wxFrame通用的framewxMDIChildFrameMDI(多文档界面)chi

978

单片机笔记十二:华大HC32L136超低功耗设计实战

本文详细介绍了华大HC32L136单片机的超低功耗设计实战,包括深度睡眠模式下仅0.5μA的电流消耗、五种功耗模式的对比与配置、外设使用技巧及硬件级优化方法。通过实际项目案例,展示了如何利用ARM Cortex-M0+内核的HC32L136显著延长电池寿命,适用于智能门锁、额温枪等低功耗设备。

weixin_29189373的博客 398

wxWidgets类列表(2.6.4)

按类别分类(wxWidgets 2.6.4)一个按类别的wxWidgets类的分类 管理窗口这里有若干直接由窗口管理器(例如:MS Windows或Motif Window Manager)操纵的窗口类型。在wxWidgets中,frames和dialogs是相似的,但是只有dialogs可能是模式的。

t0ny的专栏 2205

Win11右下角不显示图标怎么办?Win11右下角不显示图标的解决方法

所以有不少符合资格的小伙伴都下载进行体验了,但是有的小伙伴在升级完系统之后发现桌面右下角不显示任何图标,那么遇到这种情况要怎么办呢?下面就和小编一起来看看有什么解决方法吧。2、接着找到任务栏设置中的“taskbar corner overflow”。3、然后在下方勾选打开想要显示的图标程序就可以了。1、首先右键任务栏,在其中选择“任务栏设置”。目前微软已经正式推出了。

2401_88800025的博客 885

QML实现ListView的拖动排序

现有一种需求,就是用鼠标拖动某项,动态去改变某一项在ListView中显示的顺序位置,经过研究及实践实战,实现方式的核心代码如下: import QtQuick 2.4 import QtQuick.Controls 1.3 import QtQuick.Window 2.2 import QtQuick.Dialogs 1.2 Rectangle { width: 800 ...

草上爬的博客 7564

wx控件之单选框与复选框

单选控件是单选按钮(wx.RadioButton),同一组的多个单选按钮互斥。多选控件是复选框(wx.CheckBox),有时也可以单独使用。

qq_56891068的博客 334

飞牛fnNAS免费内网穿透之zerotier篇

本文介绍了如何通过ZeroTier实现飞牛NAS的远程文件共享。首先,用户需要在ZeroTier官网注册账号并创建虚拟局域网。接着,分别在Windows和飞牛NAS上安装ZeroTier客户端,并通过SSH登录飞牛NAS进行配置。安装完成后,用户可以在ZeroTier页面中授权设备加入虚拟局域网。最后,通过Windows的“网上邻居”功能访问飞牛NAS的共享文件夹,实现跨局域网的文件共享。这种方法不仅适用于文件共享,还可以用于打印机共享和远程桌面连接。

dgnankai的专栏 2465

wxWidgets 类列表

引用自:http://hi.baidu.com/lihuihuiqwer/blog/item/8ce51eae4f4411a6ca130c5a.html //管理窗口 wxTopLevelWindow //(任意的顶层窗口,dialog或frame) wxDialog //(对话框) wxFrame //(通用的frame) wxMDIChildFrame //(MDI"多文档界面"ch

qhdcsj的专栏 1557

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

实战wxPython:043 - 高级控件之表格Grid

wx.grid.Grid及其相关类用于显示和编辑表格数据。它们提供了一组丰富的功能,用于显示、编辑和与各种数据源交互。 wx.grid.Grid是一个功能强大的但是又稍微有一些复杂的窗口类,它用来显示表格类型的数据。可以使用wx.Grid来作为一个包含名称和值两栏的属性编辑器。或者是通过代码使其作为一个一般意义上的表格,用来显示一个数据库或者是应用程序产生的特定统计数据。

seniorwizard的专栏 5049

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

在wxwidgets 界面编程使用 png 图片

浏览博客时候发现这篇文章《wxwidgets 界面编程如何使用png 图片》 由于原文代码在我机器测试不太靠谱,会崩溃,然后就自己动手按照它的思路弄了自己实现了下。 首先是把png图片转成hex保存一个数组中,这里偶之前做了个GUI工具,将就着还可以用,想偷懒的可以下载: http://download.youkuaiyun.com/detail/ccnyou/4616751 运行截图:

ccnyou的专栏 4389

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

uniApp中 nvue和vue开发 小结

最近接手uniapp开发,对遇到的问题进行总结。 什么是nvue nvue(native vue) : 原生渲染 为何要用nvue开发 weex ,有个很大的问题是它只是一个高性能的渲染器,没有足够的API能力(比如各种push sdk集成、蓝牙等能力调用),使得开发时非常依赖原生工程师协作,开发者本来想节约成本,结果需要前端、iOS、Android 3拨人开发,适得其反。 nvue 解决了这个问题,让前端工程师可以直接开发完整 App,并提供丰富的插件生态和云打包。这些组合方案,帮助开发者切实的

负数 8619

wxPython中按钮支持拖拽和点击功能

这里的思路是不移动鼠标则不设置拖拽功能,直接使用正常点击功能,如果按下出现了鼠标的移动,则需要设置拖拽的内容,注意这里要使用wx.CallLater,防止出现按下的按钮不会回弹,这是因为DoDraoDrop是阻塞的,会影响按钮的显示效果。最后的capture_lost只是为了处理使用中出现的一个报错。

more_HH 625

NativeWindow 妙用,截取windows消息

namespace System.Windows.Forms{ using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Design; using System.Globalization; using System.Runtime.Interop...

weixin_33800463的博客 2270

wxWidgets处理Windows消息

经过分析src/msw/window.cpp,通过重载wxWindow的MSWWindowProc方法莱实现。  WXLRESULT   MyPanel::MSWWindowProc(WXUINT   message,   WXWPARAM   wParam,   WXLPARAM   lParam)  {          switch(   message   )

embededvc的专栏 2437

uni-app 使用Weex/nvue的注意事项

uni-app App端内置了一个基于 weex 改进的原生渲染引擎,提供了原生渲染能力。在App端,如果使用vue页面,则使用webview渲染;如果使用nvue页面(native vue的缩写),则使用原生渲染。一个App中可以同时使用两种页面,比如首页使用nvue,二级页使用vue页面,hello uni-app示例就是如此。虽然nvue也可以多端编译,输出H5和小程序,但nvue的css写法受限,所以如果你不开发App,那么不需要使用nvue。以往的 weex ,有个很大的问题是它只是一个高性能的渲

qq_57263284的博客 3699

wxPython之wx.DC

wx.DC  能够在电脑显示器上显示对象,是GUI工具包最基本的功能之一。对于wxPython,对象通过发送给设备上下文(Device Context, DC)的绘制命令显示在屏幕上。在底层,所有控件都是以位图形式绘制在屏幕上。DC的接口允许自定义控件的外观。   所有可见地显示在屏幕上的窗口发出一些绘制命令给DC,告诉系统哪些像素信息显示在屏幕上。一些控件类,例如wx.Control, wx.

阿兵-AI医疗的专栏 3804

uni-app: 从运行原理上面解决性能优化问题

前言 Uni-App,从了解到开发,相信大家都会觉得Uni-App性能不好,其实也这是非原生的弊病。React Native、Flutter等,非原生框架,性能上都会或多或少的折损。但各个框架,都会做出性能提升建议,所以开发者在开发前,多了解一下,后面维护升级等就会更方便一点,否则项目越来越大,后续开发就会越来越难。 uni-app: 如何高效开发uni app?" /> 现在我们就从uni-app运行原理上,了解一下,在哪些方面存在性能折损问题? 运行原理 逻辑层和视图层分离,非H5端

u010227042的博客 2841

python绘制动态圆_python – 在2D动画上绘制可变大小和位置的圆圈

我在Python 3.3中使用matplotlib.我有一个动画的2D和3D窗口,我在上面绘制点.这些点代表对象,但不确定它们实际上是在那里.所以我想围绕这些点绘制一个圆圈来显示不确定性.这种不确定性是变化的,所以底线:我想在具有可变中心和可变半径的2D动画中绘制多个(可能是0,可能是100)圆周.我试过散布. Scatter看起来非常有前景,直到我调整屏幕大小:散点的大小以像素为单位,与轴的大小...

weixin_39944515的博客 1288

目前为止最全的微信小程序项目实例

wx-gesture-lock微信小程序的手势密码 WXCustomSwitch微信小程序自定义 Switch 组件模板 WeixinAppBdNovel微信小程序demo:百度小说搜索 shitoujiandaobu小程序:石头剪刀布(附代码说明) audiode...

chunfu7085的博客 5万+

wxpython treectrl

(child, cookie) = self.tree.GetFirstChild(root)              while child.IsOk():                  (child, cookie) = self.tree.GetNextChild(root, cookie)  If you call GetNextChild() when there

qq550764107的专栏 1515
上一篇: wxPython之解决闪烁
下一篇: Spring Boot AOP之Java 动态代理
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值