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 相关文章推荐
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
Python实现获取域名所用服务器的真实IP
Oct 25 Python
Python实现的多线程http压力测试代码
Feb 08 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
django反向解析和正向解析的方式
Jun 05 Python
python简单实现AES加密和解密
Mar 28 Python
Python3中列表list合并的四种方法
Apr 19 Python
python读csv文件时指定行为表头或无表头的方法
Jun 26 Python
python实现超市管理系统(后台管理)
Oct 25 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
将tensorflow模型打包成PB文件及PB文件读取方式
Jan 23 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 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截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
禁止刷新,回退的JS
2006/11/25 Javascript
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
基于ionic实现下拉刷新功能
2018/05/10 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
原生js实现分页效果
2020/09/23 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
揭牌仪式策划方案
2014/05/28 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
农村党员对照检查材料
2014/09/24 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python