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使用电子邮件模块smtplib的方法
Aug 28 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
简单了解python的内存管理机制
Jul 08 Python
python变量的存储原理详解
Jul 10 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
OpenCV+Python--RGB转HSI的实现
Nov 27 Python
win10下python3.8的PIL库安装过程
Jun 08 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
Python3.9.1中使用match方法详解
Feb 08 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中CI操作多个数据库的代码
2012/07/05 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
javascript事件模型代码
2007/07/01 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
原生js实现日期联动
2015/01/12 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
babel基本使用详解
2017/02/17 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
pandas去除重复列的实现方法
2019/01/29 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
创业者是否需要商业计划书?
2014/02/07 职场文书
利群广告词
2014/03/20 职场文书
项目合作意向书范本
2014/04/01 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
redis实现的四种常见限流策略
2021/06/18 Redis
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android