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每次处理固定个数的字符的方法总结
Jan 29 Python
python 多进程通信模块的简单实现
Feb 20 Python
零基础写python爬虫之打包生成exe文件
Nov 06 Python
python通过pil将图片转换成黑白效果的方法
Mar 16 Python
Python做简单的字符串匹配详解
Mar 21 Python
python针对不定分隔符切割提取字符串的方法
Oct 26 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
win10环境下配置vscode python开发环境的教程详解
Oct 16 Python
Django 简单实现分页与搜索功能的示例代码
Nov 07 Python
详解python算法常用技巧与内置库
Oct 17 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
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
php实现文件预览功能
2017/05/23 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
jQuery自定义添加"$"与解决"$"冲突的方法
2015/01/19 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
JS监听事件的叠加和移除功能
2018/11/19 Javascript
Python过滤列表用法实例分析
2016/04/29 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
python如何在循环引用中管理内存
2018/03/20 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
python selenium 获取接口数据的实现
2020/12/07 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
售房委托书
2014/08/30 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
中学生检讨书1000字
2014/10/28 职场文书
寒山寺导游词
2015/02/03 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
golang 实现并发求和
2021/05/08 Golang
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript