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的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
Aug 22 Python
简单了解python PEP的一些知识
Jul 13 Python
tensorflow 只恢复部分模型参数的实例
Jan 06 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
May 07 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
Window下PHP三种运行方式图文详解
2013/06/11 PHP
PHP整合PayPal支付
2015/06/11 PHP
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
PHP使用函数用法详解
2018/09/30 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
JQuery实现自定义对话框的代码
2008/06/15 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
学习vue.js计算属性
2016/12/03 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
JS实现网页烟花动画效果
2020/03/10 Javascript
从零学Python之hello world
2014/05/21 Python
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
理解python正则表达式
2016/01/15 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
化妆品促销方案
2014/02/24 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
财务负责人岗位职责
2015/02/03 职场文书
2015元旦感言
2015/12/09 职场文书