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冒泡排序算法的实现代码
Nov 21 Python
python3结合openpyxl库实现excel操作的实例代码
Sep 11 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
Python Cookie 读取和保存方法
Dec 28 Python
python中如何使用分步式进程计算详解
Mar 22 Python
Python中使用logging和traceback模块记录日志和跟踪异常
Apr 09 Python
pip安装python库的方法总结
Aug 02 Python
Python while true实现爬虫定时任务
Jun 08 Python
python中selenium库的基本使用详解
Jul 31 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 17 Python
python某漫画app逆向
Mar 31 Python
Python中使用Lambda函数的5种用法
Apr 01 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
东方红 - 来复式再生机的修复
2021/03/02 无线电
phpmyadmin操作流程
2006/10/09 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
php二维码生成以及下载实现
2017/09/28 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
面试常见的js算法题
2017/03/23 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
给Python入门者的一些编程建议
2015/06/15 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
Python检查ping终端的方法
2019/01/26 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
基于pandas中expand的作用详解
2019/12/17 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
甜美蛋糕店创业计划书
2014/01/30 职场文书
网络技术专业推荐信
2014/02/20 职场文书
走进敬老院活动总结
2014/07/10 职场文书
六年级小学生评语
2014/12/26 职场文书
搞笑结婚保证书
2015/05/08 职场文书
公司考勤管理制度
2015/08/04 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
CSS完成视差滚动效果
2021/04/27 HTML / CSS