1、第第5章章 Tkinter 图形绘制图形绘制图形图形版发牌程序版发牌程序主讲主讲 夏敏捷夏敏捷计算机学院副教授计算机学院副教授5.1 扑克牌发牌窗体程序功能介绍 4名牌手打牌,计算机随机将52张牌(不含大王和小王)发给4名牌手,在屏幕上显示每位牌手的牌,程序的运行效果如图所示。接下来,我们以Tkinter模块图形Canvas绘制为例学习建立一些简单的GUI(图形用户界面)游戏界面。5.2 程序设计的思路 将要发的52张牌,按梅花012,方块1325,红桃2638,黑桃3951顺序编号并存储在pocker列表(未洗牌之前),列表元素存储的是某张牌(实际上是牌的编号)。同时按此编号顺序存储扑克牌图
2、片imgs列表中。也就是说imgs0存储梅花A的图片,imgs1存储梅花2的图片,则imgs14存储方块2的图片。发牌后,根据每位牌手(p1,p2,p3,p4)各自牌的编号列表,从imgs获取对应牌的图片并使用create_image(x坐标,y坐标),image=图像文件)显示在指定位置。5.3 Canvas图形绘制技术 5.3.1 Canvas5.3.1 Canvas画布组件画布组件 Canvas(画布)是一个长方形的区域,用于图形绘制或复杂的图形界面布局。可以在画布上绘制图形、文字,放置各种组件和框架。5.3 图形绘制5.3.2 Canvas5.3.2 Canvas上的图形对象上的图形对
3、象Canvas画布上可以绘制各种图形对象。通过调用如下绘制函数实现。create_arc()绘制圆弧。create_line()绘制直线。create_bitmap()绘制位图。create_image()绘制位图图像。create_oval()绘制椭圆。create_polygon()绘制多边形。create_window()绘制子窗口。create_text()创建一个文字对象图形对象id、标记(tag)id1=cv.create_line(10,10,100,80,width=2,dash=7)#绘制直线id1可以得到绘制对象直线id。使用属性tags设置图形对象的标记(tag)rt=c
4、v.create_rectangle(10,10,110,110,tags=r1)上面的语句指定矩形对象rt具有一个标记r1。rt=cv.create_rectangle(10,10,110,110,tags=(r1,r2,r3)上面的语句指定矩形对象rt具有3个标记r1,r2,r3。使用find_withtag(r1)方法可以获取到指定tag的图形对象。【例5-1】使用属性tags设置图形对象标记的例子。from tkinter import*root=Tk()#创建一个Canvas,设置其背景色为白色cv=Canvas(root,bg=white,width=200,height=200)
5、#使用tags指定给第一个矩形指定3个tagrt=cv.create_rectangle(10,10,110,110,tags=(r1,r2,r3)cv.pack()cv.create_rectangle(20,20,80,80,tags=r3)#使用tags指定给第2个矩形指定1个tag#将所有与tag(r3)绑定的item边框颜色设置为蓝色for item in cv.find_withtag(r3):cv.itemconfig(item,outline=blue)root.mainloop()2绘制圆弧 Canvas对象.create_arc(弧外框矩形左上角的x坐标,弧外框矩形左上角的
6、y坐标,弧外框矩形右下角的x坐标,弧外框矩形右下角的y坐标,选项,.)【例5-2】使用create_ arc()方法创建圆弧的例子。3绘制线条 canvas.create_line(x0,y0,x1,y1,.,xn,yn,选项)参数x0,y0,x1,y1,.,xn,yn是线段的端点。【例5-3】使用create_line()方法创建线条对象的例子。from tkinter import*root=Tk()cv=Canvas(root,bg=white,width=200,height=100)cv.create_line(10,10,100,10,arrow=none)#绘制没有箭头线段cv.
7、create_line(10,20,100,20,arrow=first)#绘制起点有箭头线段cv.create_line(10,30,100,30,arrow=last)#绘制终点有箭头线段cv.create_line(10,40,100,40,arrow=both)#绘制两端有箭头线段cv.create_line(10,50,100,100,width=3,dash=7)#绘制虚线cv.pack()root.mainloop()4绘制矩形 使用create_ rectangle()方法可以创建矩形对象。Canvas对象.create_rectangle(矩形左上角的x坐标,矩形左上角的y坐
8、标,矩形右下角的x坐标,矩形右下角的y坐标,选项,.)创建矩形对象时的常用选项:outline指定边框颜色,fill指定填充颜色,width指定边框的宽度,dash指定边框为虚线,stipple使用指定自定义画刷填充矩形。【例5-4】使用create_rectangle()方法创建矩形对象的例子。运行效果如图5-4所示。5绘制多边形 使用create_polygon()方法可以创建一个多边形对象,Canvas对象.create_polygon(顶点1的x坐标,顶点1的y坐标,顶点2的x坐标,顶点2的y坐标,顶点n的x坐标,顶点n的y坐标,选项,.)【例5-5】创建三角形、正方形、对顶三角形对象
9、的例子。6绘制椭圆 使用create_oval()方法可以创建一个椭圆对象 Canvas对象.create_oval(包裹椭圆的矩形左上角x坐标,包裹椭圆的矩形左上角y坐标,包裹椭圆的矩形右下角x坐标,包裹椭圆的矩形右下角y坐标,选项,.)7绘制文字 7绘制文字 使用create_text()方法可以创建一个文字对象 文字对象=Canvas对象.create_text(文本左上角的x坐标,文本左上角的y坐标),选项,.)8绘制位图和图像(1)绘制位图使用create_bitmap()方法可以绘制Python内置的位图Canvas对象.create_bitmap(x坐标,y坐标),bitmap=
10、位图字符串,选项,.)其中:(x坐标,y坐标)是位图放置的中心中心坐标;常用选项有bitmap、activebitmap和disabledbitmap,分别用于指定正常、活动、禁用状态显示的位图。(2)绘制图像在游戏开发中需要使用大量图像,采用create_image()方法可以绘制图形图像,具体方法如下:Canvas对象.create_image(x坐标,y坐标),image=图像文件对象,选项,.)【例5-9】绘制图像示例,运行效果如图5-9所示。9修改图形对象的坐标使用coords()方法可以修改图形对象的坐标,具体方法如下:Canvas对象.coords(图形对象,(图形左上角的x坐标
11、,图形左上角的y坐标,图形右下角的x坐标,图形右下角的y坐标)【例5-10】修改图形对象的坐标示例,运行效果如图5-10所示。10移动指定图形对象 使用move()方法可以修改图形对象的坐标,具体方法如下:Canvas对象.move(图形对象,x坐标偏移量,y坐标偏移量)11删除图形对象使用delete()方法可以删除图形对象Canvas对象.delete(图形对象)例如:cv.delete(rt1)#删除rt1图形对象12缩放图形对象 使用scale()方法可以缩放图形对象,具体方法如下:Canvas对象.scale(图形对象,x轴偏移量,y轴偏移量,x轴缩放比例,y轴缩放比例)扑克牌发牌程序窗体图形版 4名牌手打牌,电脑随机将52张牌(不含大小鬼)发给4名打牌,在屏幕上显示每位牌手的牌。程序的运行效果如图所示。