热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

wxPython中的GDI画刷技术深入解析(第三部分)

在wxPython中,GDI画刷技术是实现图形区域填充的关键工具。本文深入探讨了画刷的多种属性,如颜色和样式,并详细介绍了如何通过`dc.SetBackground(brush)`方法设置控件的背景色,确保其与父窗口背景的一致性。此外,文章还扩展讨论了画刷在复杂图形绘制中的应用,提供了丰富的代码示例和实践技巧。

画笔是在区域中填充的绘图工具。它用于绘制矩形、 椭圆等。 它有一种颜色和样式属性。

一. dc.SetBackground(brush) 利用该方法,保持控件的背景色与父窗口被景色一致。

  具体使用方式:

  1. 首先获得被景色的画刷,brush = self.GetBackgroundBrush(dc)

def GetBackgroundBrush(self, dc):colBg = self.GetBackgroundColour()brush = wx.Brush(colBg, wx.SOLID) myAttr = self.GetDefaultAttributes()parAttr = self.GetParent().GetDefaultAttributes()myDef = colBg == myAttr.colBgparDef = self.GetParent().GetBackgroundColour() == parAttr.colBgif myDef and parDef:if wx.Platform == "__WXMAC__":brush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActiveelif wx.Platform == "__WXMSW__":if self.DoEraseBackground(dc):brush = Noneelif myDef and not parDef:colBg = self.GetParent().GetBackgroundColour()brush = wx.Brush(colBg, wx.SOLID) return brush

  2. 在OnPaint方法中,绘制一致的被景色。

if brush is not None:dc.SetBackground(brush)dc.Clear()

二.   利用wx.GCDC绘制半透明效果。普通的DC不带透明效果。

 

## #details# 绘制带透明背景的矩形区域def __DrawAlphaRectangle(self, dc):try:gcdc = wx.GCDC(dc)except:gcdc = dcalphaColor = wx.Color(0, 0, 0, 128)#半透明brush = wx.Brush(alphaColor)gcdc.SetBrush(brush)gcdc.DrawRectangle(40, 40, 40, 50)def __DrawSimpleRectangle(self, dc):alphaColor = wx.Color(0, 0, 0, 128)#半透明,但是在该dc下不会起效果brush = wx.Brush(alphaColor)dc.SetBrush(brush)dc.DrawRectangle(100, 100, 40, 50) 

运行效果:

三.   DrawBitmp在dc上画透明背景png图像及绘制disable样式的效果。

def __DrawPNG(self, dc):bmp = wx.Bitmap('earth.png') dc.DrawBitmap(bmp, 0, 0)image = wx.ImageFromBitmap(bmp)imageutils.grayOut(image)dc.DrawBitmap(wx.BitmapFromImage(image), 240, 0)

 

运行效果:

 

四. region区域绘图。

def __DrawInClippedRegion(self, dc):region = wx.RegionFromPoints(((20, 20),(40, 20), (40,0), (100, 200), (20,200)))dc.SetClippingRegionAsRegion(region)#在clipregion 里面作图像alphaColor = wx.Color(0, 0, 0, 128)#半透明,但是在该dc下不会起效果brush = wx.Brush(alphaColor)dc.SetBrush(brush)dc.DrawRectangle(0, 0, 500, 500)dc.DestroyClippingRegion()

 

运行效果:

 

 

 

转:https://www.cnblogs.com/ankier/archive/2013/01/19/2867289.html



推荐阅读
  • 基于STM32的智能太阳能路灯设计与华为云IOT集成方案
    基于STM32的智能太阳能路灯设计与华为云IOT集成方案 ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • Android开发常见问题汇总(含Gradle解决方案)第二篇
    本文继续深入探讨Android开发中常见的问题及其解决方案,特别聚焦于Gradle相关的挑战。通过详细分析和实例演示,帮助开发者高效解决构建过程中的各种难题,提升开发效率和项目稳定性。 ... [详细]
  • 深入浅出解析HTTP协议的核心功能与应用
    前言——协议是指预先设定的通信规则,确保双方能够按照既定标准进行有效沟通,从而实现准确的信息交换。例如,驯兽师通过拍手使动物坐下,这实际上是一种预设的协议。本文将详细探讨HTTP协议的核心功能及其广泛应用,解析其在现代网络通信中的重要作用。 ... [详细]
  • 本文探讨了Huffman树在数据结构中的应用及其原理。Huffman树,即哈夫曼树,是一种高效的数据压缩技术,通过构建最优二叉树实现编码,广泛应用于文件压缩和网络传输中,有效减少数据存储和传输的空间需求。 ... [详细]
  • 算术表达式分析与解析技术初探
    本文初步探讨了算术表达式的分析与解析技术,针对作者在职业转型过程中发现自身算法基础薄弱的问题,决定在接下来的三个月内,系统地学习和掌握常用数据结构与算法,以提升个人技术能力。研究内容不仅涵盖了基本的算术表达式解析方法,还深入讨论了其在实际应用中的优化策略,为相关领域的进一步研究奠定了基础。 ... [详细]
  • 多进程程序异常退出问题分析与解决 ... [详细]
  • Python初学者入门指南:从基础到实践的全面学习路径本文为Python初学者提供了一条从基础到实践的全面学习路径。特别介绍了Python字典(Dictionary)中的`items()`方法,该方法用于返回字典中所有键值对的视图对象,便于在循环和其他操作中使用。通过实例讲解,帮助读者更好地理解和应用这一重要功能。 ... [详细]
  • Panabit应用层流量管理解决方案
    Panabit是一款国内领先的应用层流量管理解决方案,提供高度开放且免费的专业服务,尤其擅长P2P应用的精准识别与高效控制。截至2009年3月25日,该系统已实现对多种网络应用的全面支持,有效提升了网络资源的利用效率和安全性。 ... [详细]
  • 浏览器与服务器在网站访问过程中的数据交互分析
    本文分析了浏览器与服务器在网站访问过程中基于HTTP协议的数据交互机制。HTTP协议具有轻量级和高效通信的特点,主要通过GET、HEAD和POST方法进行数据传输。其“请求-响应”模式确保了数据交互的有序性和可靠性,同时支持多种数据格式和内容类型,为现代Web应用提供了坚实的基础。 ... [详细]
  • 在Android开发中,若需在SQLite数据库中设置包含自增ID列的复合主键,正确的做法是在创建表时明确指定主键字段及其属性。例如,在创建表时可以通过SQL语句定义复合主键,确保每个记录的唯一性。如果遇到语法不确定的情况,可以在Java代码中通过ContentValues对象插入数据,同时注意处理SQLite的异常情况,以保证数据操作的准确性与完整性。 ... [详细]
  • 如何在Linux系统上部署MySQL 5.7.28
    本文详细介绍了在Linux系统上部署MySQL 5.7.28的具体步骤。通过官方下载页面获取最新安装包后,按照提供的指南进行配置和安装。文章内容实用性强,适合初学者和有经验的管理员参考。 ... [详细]
  • AngularJS uirouter模块下的状态管理机制深入解析
    本文深入探讨了 AngularJS 中 ui-router 模块的状态管理机制。通过详细分析状态配置、状态转换和嵌套状态等核心概念,结合实际案例,帮助开发者更好地理解和应用这一强大工具,提升单页面应用的开发效率和用户体验。 ... [详细]
  • JMeter(六):组件作用范围与执行流程详解
    在《JMeter(六):组件作用范围与执行流程详解》中,我们将深入探讨组件的作用范围及其执行流程。不同于测试计划和线程组,JMeter中的八类可执行组件具有特定的作用域,这些组件在测试过程中发挥着不同的功能。本文将详细解析这些组件的作用范围,并介绍它们在测试执行过程中的具体行为和相互关系。通过本文,读者将能够更好地理解和优化JMeter测试脚本的设计与执行。 ... [详细]
  • 本文深入探讨了Linux内核网络协议栈中sk_buff结构体的操作函数,详细解析了其在数据包处理过程中的关键作用与实现机制,为开发者提供了深入了解和优化网络性能的宝贵资源。 ... [详细]
author-avatar
爱中华爱美丽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有