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解决字典中的值是列表问题的方法
Mar 04 Python
Python中字典和JSON互转操作实例
Jan 19 Python
对pandas的dataframe绘图并保存的实现方法
Aug 05 Python
python中reduce()函数的使用方法示例
Sep 29 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
python实现梯度下降算法
Mar 24 Python
Python任意字符串转16, 32, 64进制的方法
Jun 12 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
python包的导入方式总结
Mar 02 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用mysql数据库存储session的代码
2010/03/05 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
js实现页面转发功能示例代码
2013/08/05 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
python实现定制交互式命令行的方法
2014/07/03 Python
Python 常用 PEP8 编码规范详解
2017/01/22 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
自学python的建议和周期预算
2019/01/30 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python与pycharm有何区别
2020/07/01 Python
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
中软国际Java程序员机试题
2012/08/19 面试题
经济管理毕业生求职信
2014/03/15 职场文书
党员一句话承诺大全
2014/03/28 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
协议书样本
2014/04/23 职场文书
2014年科协工作总结
2014/12/09 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
经理岗位职责
2015/02/02 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
战友聚会致辞
2015/07/28 职场文书
值班管理制度范本
2015/08/06 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
利用 JavaScript 构建命令行应用
2021/11/17 Javascript
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技