wxPython之wx.DC绘制形状


Posted in Python onNovember 19, 2019

本文实例为大家分享了wxPython绘制形状的具体代码,供大家参考,具体内容如下

绘制形状

除了绘制文本和位图,DC也可以绘制任意的形状和线。这允许我们完全自定义窗口部件和控件的外观。

示例说明

利用PaintDC创建一个简单笑脸控件。

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

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

class Smiley(wx.PyControl):
  def __init__(self, parent, size=(100, 100)):
    super(Smiley, self).__init__(parent,
    size=size,
    style=wx.NO_BORDER)
    # Event Handlers
    self.Bind(wx.EVT_PAINT, self.OnPaint)

  def OnPaint(self, event):
    """Draw the image on to the panel"""
    dc = wx.PaintDC(self) # Must create a PaintDC
    # Get the working rectangle we can draw in
    rect = self.GetClientRect()
    # Setup the DC
    dc.SetPen(wx.BLACK_PEN) # for drawing lines / borders
    yellowbrush = wx.Brush(wx.Colour(255, 255, 0))
    dc.SetBrush(yellowbrush) # Yellow fill

    cx = (rect.width / 2) + rect.x
    cy = (rect.width / 2) + rect.y
    radius = min(rect.width, rect.height) / 2
    dc.DrawCircle(cx, cy, radius)
    eyesz = (rect.width / 8, rect.height / 8)
    eyepos = (cx / 2, cy / 2)
    dc.SetBrush(wx.BLUE_BRUSH)
    dc.DrawRectangle(eyepos[0], eyepos[1],
    eyesz[0], eyesz[1])
    eyepos = (eyepos[0] + (cx - eyesz[0]), eyepos[1])
    dc.DrawRectangle(eyepos[0], eyepos[1],
    eyesz[0], eyesz[1])
    dc.SetBrush(yellowbrush)
    startpos = (cx / 2, (cy / 2) + cy)
    endpos = (cx + startpos[0], startpos[1])
    dc.DrawArc(startpos[0], startpos[1],
    endpos[0], endpos[1], cx, cy)
    dc.SetPen(wx.TRANSPARENT_PEN)
    dc.DrawRectangle(startpos[0], cy,
    endpos[0] - startpos[0],
    startpos[1] - cy)

class MyFrame(wx.Frame):
  def __init__(self, parent, *args, **kwargs):
    super(MyFrame, self).__init__(parent, *args, **kwargs)
    # Attributes
    self.Panel = wx.Panel(self)
    Smiley(self.Panel)

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

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

运行结果:

wxPython之wx.DC绘制形状

示例分析

DC的SetPen用来绘制线条和形状的边框。DC的SetBrush用来填充颜色。首先使用DCdeDrawCircle绘制一个黑色边框的黄色圆,表示头。然后使用DrawRectangle方法绘制蓝色矩形,表示眼睛。最后使用DC的DrawArch方法绘制扇形,因为只想用圆弧来表示微笑,所以用矩形覆盖圆弧两端的两条半径线。

常用的基本绘制函数

wxPython之wx.DC绘制形状

wxPython之wx.DC绘制形状

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解析json实例方法
Nov 19 Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
python opencv之分水岭算法示例
Feb 24 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
Python socket非阻塞模块应用示例
Sep 12 Python
用Python写一个自动木马程序
Sep 17 Python
Python实现中值滤波去噪方式
Dec 18 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
python实现提取COCO,VOC数据集中特定的类
Mar 10 Python
Python self用法详解
Nov 28 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
python matplotlib拟合直线的实现
Nov 19 #Python
Python线程指南分享
Nov 19 #Python
wxpython+pymysql实现用户登陆功能
Nov 19 #Python
pygame编写音乐播放器的实现代码示例
Nov 19 #Python
pyinstaller打包程序exe踩过的坑
Nov 19 #Python
基于Python中的yield表达式介绍
Nov 19 #Python
Python函数式编程指南:对生成器全面讲解
Nov 19 #Python
You might like
php设计模式之单例模式实例分析
2015/02/25 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
Python Property属性的2种用法
2015/06/21 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
老生常谈python中的重载
2018/11/11 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
毕业生造价工程师求职信
2013/10/17 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
初中生评语大全
2014/04/24 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
财产分割协议书范本
2014/11/03 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
经理助理岗位职责
2015/02/02 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
教师学习心得体会范文
2016/01/21 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
Flask搭建一个API服务器的步骤
2021/05/28 Python
Python函数对象与闭包函数
2022/04/13 Python