当前位置: 首页 > news >正文

福州网站建设发布做教育行业营销类型的网站

福州网站建设发布,做教育行业营销类型的网站,上海做家庭影院的公司网站,网络营销 企业网站python - [译][Tkinter 教程08] Canvas 图形绘制 - 个人文章 - SegmentFault 思否 一、简介 Canvas 为 Tkinter 提供了绘图功能. 其提供的图形组件包括 线形, 圆形, 图片, 甚至其他控件. Canvas 控件为绘制图形图表, 编辑图形, 自定义控件提供了可能. 在第一个例子里, …python - [译][Tkinter 教程08] Canvas 图形绘制 - 个人文章 - SegmentFault 思否 一、简介 Canvas 为 Tkinter 提供了绘图功能. 其提供的图形组件包括 线形, 圆形, 图片, 甚至其他控件. Canvas 控件为绘制图形图表, 编辑图形, 自定义控件提供了可能.         在第一个例子里, 我们将演示如何画一条直线. create_line(coords, options) 方法用来绘制一条直线. coords 为以整形表示的四个坐标参数: x1, y1, x2, y2 . 这表示所要绘制的直线连接了 (x1, y1) 和 (x2, y2) 这两个点. 除坐标外, 该方法还接受其他可选的 options 参数. 在下面的例子里我们用 options 参数指定颜色为我们网站的主题色: fill#476042 .         因为是第一个例子, 所以我们尽量做了简化: 创建一个 canvas 对象然后在其上绘制一条水平直线. 这条直线将 canvas 分割为上下两部分.         在传入坐标参数时, y int(canvas_height / 2) 这种强制转换整形的表达式是没有必要的, 因为 create_line() 方法也接受 float 类型作为坐标参数, float 坐标数值将被自动转为整形. 下面是第一个例子的代码: from tkinter import * master Tk()canvas_width 80 canvas_height 40 w Canvas(master, widthcanvas_width,heightcanvas_height) w.pack()y int(canvas_height / 2) w.create_line(0, y, canvas_width, y, fill#476042)mainloop() 上述代码在 Python3 下会有如下显示: 使用 create_rectangle(coords, options) 方法可以绘制矩形. coords 参数依然表示两个点的坐标: 第一个点为左上角坐标, 第二个点为右下角坐标. 上面的窗口是由以下示例代码生成的: from tkinter import *master Tk()w Canvas(master, width200, height100) w.pack()w.create_rectangle(50, 20, 150, 80, fill#476042) w.create_rectangle(65, 35, 135, 65, fillyellow) w.create_line(0, 0, 50, 20, fill#476042, width3) w.create_line(0, 100, 50, 80, fill#476042, width3) w.create_line(150,20, 200, 0, fill#476042, width3) w.create_line(150, 80, 200, 100, fill#476042, width3)mainloop() 下图阐释了上面两个例子中 create_lines() 和 create_rectangle() 这两个方法中, 用到的各个坐标的含义: 二、绘制文字 接下来我们将说明如何在 canvas 上绘制文字. 我们将直接修改上面的例子以作为新的示例. create_text() 方法用来在 canvas 上绘制文字. 该方法的头两个参数表示所要绘制的文字的坐标. 默认情况下, 文字将以此坐标为中心进行绘制. 当然, 你也可以复写 anchor 属性来改变文字绘制的对齐方式. 比如, anchor NW 即为指定该点坐标为所绘文字的左上角. text 属性用以指定具体绘制在 canvas 上的文字. from tkinter import *canvas_width 200 canvas_height 100colours (#476042, yellow) box[]for ratio in ( 0.2, 0.35 ):box.append( (canvas_width * ratio,canvas_height * ratio,canvas_width * (1 - ratio),canvas_height * (1 - ratio) ) )master Tk()w Canvas(master, widthcanvas_width, heightcanvas_height) w.pack()for i in range(2):w.create_rectangle(box[i][0], box[i][1],box[i][2],box[i][3], fillcolours[i])w.create_line(0, 0, # canvas 原点box[0][0], box[0][1], # box[0] 的左上角坐标fillcolours[0], width3) w.create_line(0, canvas_height, # canvas 的左下角坐标box[0][0], box[0][3], # box[0] 的左下角坐标fillcolours[0], width3) w.create_line(box[0][2],box[0][1], # box[0] 的右上角坐标canvas_width, 0, # canvas 的右上角坐标fillcolours[0], width3) w.create_line(box[0][2], box[0][3], # box[0] 的右下角坐标canvas_width, canvas_height, # canvas 的右下角坐标fillcolours[0], width3)w.create_text(canvas_width / 2,canvas_height / 2,textPython) mainloop() 虽然从代码上来看, 我们对之前的例子做了很大的改动, 但其所输出的结果却与前例相差不大, 仅仅在窗口的中间多了一个显示 Python 字样的方框: 本例中我们改用变量存储坐标等参数, 这使得改动变的方便. 比如, 要将整个画布的宽高设为 90 * 190, 将 box[0] 的宽高比设为 0.3, 在本例中将很容易做到, 但在之前的例子中却要修改很多代码.         本例运行后显示如下窗口: 三、绘制 Oval 图形 oval 是一个蛋形的曲线. 它形似椭圆, 但并不是椭圆. 事实上, oval 这个概念没有太明确的定义. 很多不同的曲线都被叫做 oval, 他们都有如下共同点: 都是可微分的简单 (非自相交) 凸闭曲线他们比椭圆曲线简单至少有一条对称轴 oval 这个词源自拉丁语中的 ovum, 意为 蛋, 这很好的描述了它: 一条描述蛋形状的曲线. 一个 oval 由两条半径不同的弧线组成. 下图是一个特殊的 oval: 我们可以使用如下方法在 canvas 中创建一个 oval: id C.create_oval ( x0, y0, x1, y1, option, ... ) 该方法的返回值为所创建的 oval 对象在当前 canvas 上的 ID. 下面的代码绘制了一个圆心在 (75, 75), 半径为 25 的正圆形: from tkinter import *canvas_width 190 canvas_height 150master Tk()w Canvas(master, widthcanvas_width, heightcanvas_height) w.pack()w.create_oval(50,50,100,100)mainloop() 我们可以定义一个专门用来画正圆形的方法: def circle(canvas, x, y, r):id canvas.create_oval(x-r, y-r, xr, yr)return id 四、交互式绘图 我们想要创建一个可在 canvas 上手动绘图的应用, 但 canvas 并未提供画单个点的方法. 我们可以通过绘制小的 oval 图形来解决这个问题: from tkinter import *canvas_width 500 canvas_height 150def paint( event ):python_green #476042x1, y1 ( event.x - 1 ), ( event.y - 1 )x2, y2 ( event.x 1 ), ( event.y 1 )w.create_oval( x1, y1, x2, y2, fill python_green )master Tk() master.title( Painting using Ovals ) w Canvas(master, widthcanvas_width, heightcanvas_height) w.pack(expand YES, fill BOTH) w.bind( B1-Motion, paint )message Label( master, text Press and Drag the mouse to draw ) message.pack( side BOTTOM )mainloop() 五、绘制多边形 如果要绘制一个多边形, 可以使用 create_polygon(x0, y0, x1, y1, x2, y2, ...) 方法. 至少要传入三个点的坐标才可以绘制一个多边形. 下例用该方法绘制了一个三角形: from tkinter import *canvas_width 200 canvas_height 200 python_green #476042master Tk()w Canvas(master, widthcanvas_width, heightcanvas_height) w.pack()points [0,0,canvas_width,canvas_height/2, 0, canvas_height] w.create_polygon(points, outlinepython_green, fillyellow, width3)mainloop() 运行后显示为如下窗口: 或许你在读到这篇教程时圣诞节 马上就到了/为时尚早. 这里我们用 Python 和 Tkinter 做一些星星来装点我们的圣诞树. 第一课星星几乎没有用到任何编程技巧: from tkinter import *canvas_width 200 canvas_height 200 python_green #476042master Tk()w Canvas(master, widthcanvas_width, heightcanvas_height) w.pack()points [100, 140, 110, 110, 140, 100, 110, 90, 100, 60, 90, 90, 60, 100, 90, 110]w.create_polygon(points, outlinepython_green, fillyellow, width3)mainloop() 上例非常没有技术含量. 如果我们要改变星星的大小或胖瘦, 该怎么办? 上例中我们只能重新指定所有点的坐标, 这种做法乏味且易出错. 因此, 我们用了更多的编程技巧改造了上例. 首先, 我们将星星的绘制放在一个方法体中, 并用星星的原点及两个长度指定星星的具体形状: 经过改造的代码如下: from tkinter import *canvas_width 400 canvas_height 400 python_green #476042def polygon_star(canvas, x,y,p,t, outlinepython_green, fillyellow, width 1):points []for i in (1,-1):points.extend((x, y i*p))points.extend((x i*t, y i*t))points.extend((x i*p, y))points.extend((x i*t, y - i * t))print(points)canvas.create_polygon(points, outlineoutline, fillfill, widthwidth)master Tk()w Canvas(master, widthcanvas_width, heightcanvas_height) w.pack()p 50 t 15nsteps 10 step_x int(canvas_width / nsteps) step_y int(canvas_height / nsteps)for i in range(1, nsteps):polygon_star(w,i*step_x,i*step_y,p,t,outlinered,fillgold, width3)polygon_star(w,i*step_x,canvas_height - i*step_y,p,t,outlinered,fillgold, width3)mainloop() 这个例子的运行结果更像一个X形. 很显然, 用逐个指定坐标点的方法绘制这个图形将无比麻烦. 六、绘制Bitmap create_bitmap() 方法用来绘制 bitmap. 以下 bitmap 在所有平台上都可用: error, gray75, gray50, gray25, gray12, hourglass, info, questhead, question, warning 下例将这些 bitmap 全部都绘制在一个 canvas 上: from tkinter import *canvas_width 300 canvas_height 80master Tk() canvas Canvas(master, widthcanvas_width, heightcanvas_height) canvas.pack()bitmaps [error, gray75, gray50, gray25, gray12, hourglass, info, questhead, question, warning] nsteps len(bitmaps) step_x int(canvas_width / nsteps)for i in range(0, nsteps):canvas.create_bitmap((i1)*step_x - step_x/2,50, bitmapbitmaps[i])mainloop() 结果如下: 七、绘制图片 使用 create_image(x0, x0, options ...) 用来在 canvas 上绘制图片. 该方法不能直接接受图片路径等作为参数, 而是接受一个 PhotoImage 对象作为图片参数. PhotoImage 类用于读取图片, 但其只能读取 GIF 和 PGM/PPM 格式的图片. from tkinter import *canvas_width 300 canvas_height 300master Tk()canvas Canvas(master, widthcanvas_width, heightcanvas_height) canvas.pack()img PhotoImage(filerocks.ppm) canvas.create_image(20,20, anchorNW, imageimg)mainloop() 上面的代码运行后输出如下窗口: 八、小练习 编写一个方法绘制一个棋盘: checkered(canvas, line_distance), 其中: canvas 即 Canvas 对象, 棋盘在其上绘制; line_distance 为线间距. 代码如下: from tkinter import *def checkered(canvas, line_distance):# vertical lines at an interval of line_distance pixelfor x in range(line_distance,canvas_width,line_distance):canvas.create_line(x, 0, x, canvas_height, fill#476042)# horizontal lines at an interval of line_distance pixelfor y in range(line_distance,canvas_height,line_distance):canvas.create_line(0, y, canvas_width, y, fill#476042)master Tk() canvas_width 200 canvas_height 100 w Canvas(master, widthcanvas_width,heightcanvas_height) w.pack()checkered(w,10)mainloop() 上面的代码运行后输出如下窗口: 全系列:
http://www.ihoyoo.com/news/50893.html

相关文章:

  • 海珠免费网站建设华为手机网络营销策划方案
  • 网站建设收费标准方案wordpress 更换模板
  • 建设网站注册会员网站的备案可以管几年
  • 网站建设架构中小网站 架构
  • 建网站 多少钱钱建筑设计公司资质
  • 网站建设网页与数据库连接北京网站建设是什么
  • 做画册封面的网站防做网站视频
  • 怎么做网站上做电子书质量管理
  • 做网站建多大的画布python做简单网站
  • 公司做环评的网站什么是网络营销?它包括了哪些主要环节?
  • 网站设计 注意百度搜索链接
  • 网站使用标题做路径网页微信版官网登录保存文件在哪里
  • 集团网站建设方案网站开发流程管理
  • 域名交易网站哪个好抖音运营推广
  • 商务网站建站wordpress 最新发展
  • 网站首页轮播图片链接提交百度站长平台
  • 网站淘宝客怎么做的加强网站政务服务建设方案
  • 邮箱类网站模板网页布局的几种方法
  • 网站怎么做外部链接注册城乡规划师教材
  • 网站设计的优化设置wordpress网页私有
  • 绵阳公司商务网站制作网站建设 合同
  • 有赞支付 wordpress盐城seo
  • 深圳外贸网站建设企业互联网网站开发的未来方向
  • 建设项目网站备案a963中华室内设计官网
  • 做众筹网站需要什么条件咸阳网络推广
  • 服装销售网站设计与制作专业宣传片制作拍摄公司
  • 网站如何做百度百科营销推广公司案例
  • 专门做奢侈品的网站精湛的网站建设排行榜
  • 网站换服务器有影响吗seo 重庆
  • 网站作品欣赏推广网页怎么做的