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中List的sort方法指南
Sep 01 Python
python使用str & repr转换字符串
Oct 13 Python
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
Dec 09 Python
Python3计算三角形的面积代码
Dec 18 Python
python中sys.argv函数精简概括
Jul 08 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
python中append函数用法讲解
Dec 11 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
May 12 Python
pycharm 如何查看某一函数源码的快捷键
May 12 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
php array的学习笔记
2012/05/16 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
详解php中 === 的使用
2016/10/24 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中除法使用的注意事项
2014/08/21 Python
Python学生信息管理系统修改版
2018/03/13 Python
python实现汉诺塔算法
2021/03/01 Python
django Serializer序列化使用方法详解
2018/10/16 Python
Python Django基础二之URL路由系统
2019/07/18 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
Eclipse面试题
2014/03/22 面试题
SQL Server笔试题
2012/01/10 面试题
木马的传播途径主要有哪些
2016/04/08 面试题
医校毕业生自我鉴定
2014/01/25 职场文书
中学生家长评语大全
2014/04/16 职场文书
促销活动总结
2014/04/28 职场文书
医院信息公开实施方案
2014/05/09 职场文书
2015年暑假工作总结
2015/07/13 职场文书
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL