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数据类型详解(三)元祖:tuple
May 08 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
Flask中endpoint的理解(小结)
Dec 11 Python
Python实现名片管理系统
Feb 14 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
python中pyplot基础图标函数整理
Nov 10 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
实操Python爬取觅知网素材图片示例
Nov 27 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 curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
微信小程序 出现错误:{"baseresponse":{"errcode":-80002,"errmsg":""}}解决办法
2017/02/23 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
python requests 使用快速入门
2017/08/31 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
《放小鸟》教学反思
2014/04/20 职场文书
党代会心得体会
2014/09/04 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
大学校园招聘会感想
2015/08/10 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android