编程语言
C#编程语言基础
C#面向对象与多线程
C#数据及文件操作
JavaScript基础
JavaScript的数据类型和变量
JavaScript的运算符和表达式
JavaScript的基本流程控制
JavaScript的函数
JavaScript对象编程
JavaScript内置对象和方法
JavaScript的浏览器对象和方法
JavaScript访问HTML DOM对象
JavaScript事件驱动编程
JavaScript与CSS样式表
Ajax与PHP
ECMAScript6的新特性
Vue.js前端开发
PHP的常量与变量
PHP的数据类型与转换
PHP的运算符和优先规则
PHP程序的流程控制语句
PHP的数组操作及函数
PHP的字符串处理与函数
PHP自定义函数
PHP的常用系统函数
PHP的图像处理函数
PHP类编程
PHP的DataTime类
PHP处理XML和JSON
PHP的正则表达式
PHP文件和目录处理
PHP表单处理
PHP处理Cookie和Session
PHP文件上传和下载
PHP加密技术
PHP的Socket编程
PHP国际化编码
MySQL数据库基础
MySQL数据库函数
MySQL数据库账户管理
MySQL数据库基本操作
MySQL数据查询
MySQL存储过程和存储函数
MySQL事务处理和触发器
PHP操作MySQL数据库
数据库抽象层PDO
Smarty模板
ThinkPHP框架
Python语言基础
Python语言结构与控制
Python的函数和模块
Python的复合数据类型
Python面向对象编程
Python的文件操作
Python的异常处理
Python的绘图模块
Python的NumPy模块
Python的SciPy模块
Python的SymPy模块
Python的数据处理
Python操作数据库
Python网络编程
Python图像处理
Python机器学习
TensorFlow深度学习
Tensorflow常用函数
TensorFlow用于卷积网络
生成对抗网络GAN
Python环境下有大量的图形库,如tkinter画布绘图模块、建立在Tkinter上的graphics模块,还有许多第三方图形库wxPython、PyGTK、PyQt、PySide等。Python内置的turtle模块也能实现简单的绘图功能。
一、turtle模块:
turtle绘图模块是Python引入的一个简单的绘图工具,通常称为海龟绘图。绘图时有一个箭头,按照命令一笔一笔画出图形,就像海龟在屏幕上爬行,并留下爬行足迹,于是形成图形。
使用时首先引入turtle模块,有两种方法:
import turtle
from turtle import *
turtle绘图有位置、方向、画笔三个要素,位置指箭头在窗口中的位置。turtle采用笛卡尔坐标系,以窗口中心为原点,向右为x轴正方向,向上为y轴正方向。使用reset()函数式箭头回到坐标原点。方向指箭头的指向,使用left(degree)、right(degree)函数使得箭头分别向左向右旋转degree度。
画笔是指绘制的线条的颜色和宽度,相关控制函数为:
·down():放下画笔,移动时绘制图形,为默认状态
·up():提取画笔,移动时不绘制图形
·pensize(w)或width(w):绘制图形时画笔的宽度,w为正数
·pencolor(s)或color(s):绘制图形时画笔的颜色,s为字符串颜色,如red、blue、green
·fillcolor(s):绘制图形的填充颜色
turtle还有许多控制箭头运动的命令:
·goto(x,y):将箭头从当前位置移动到坐标(x,y)位置
·reset():将整个绘图窗口清空并将箭头置于原点,即窗口中心
·forward(d):控制箭头向前移动,d为移动距离
·backward(d):控制箭头向后移动,d为移动距离
·speed(v):控制箭头移动的速度,取[0,10]范围的整数,数字越大速度越快,也可以使用slow、fast来控制速度。
下面是一些命令使用示例:
t=turtle.Pen() # 弹出一个绘图窗口
t.forward(50) # 前进50像素
t.left(90) # 左转90度
t.backward(100) # 后退100像素
t.right(90) # 右转90度
t.up() # 抬起画笔,移动位置不会画出
t.down() # 画笔放下,移动位置会画出路径
t.reset() # 重置,清除画布,画笔回到起点
t.clear() # 清除,只清屏,画笔起点不变
t.color(1,1,0) # 填充颜色RGB()
t.circle(50) # 画圆
t.begin_fill() # 开始填充
t.end_fill() # 结束填充
一些图形示例:
⑴画正方形:
import turtle
t=turtle.Pen()
t.reset()
for x in range(1,5):
t.forward(50)
t.left(90)
⑵画八角星星:
import turtle
t=turtle.Pen()
t.reset()
for x in range(1,9):
t.forward(100)
t.left(225)
⑶画多角星星:
import turtle
t=turtle.Pen()
t.reset()
for x in range(1,38):
t.forward(100)
t.left(175)
⑷画螺旋星:
import turtle
t=turtle.Pen()
t.reset()
for x in range(1,20):
t.forward(100)
t.left(95)
⑸画长长角的星星:
import turtle
t=turtle.Pen()
t.reset()
for x in range(1,19):
t.forward(100)
if x%2==0:
t.left(175)
else:
t.left(225)
⑹科赫分形曲线雪花:
from turtle import *
def koch(n,k):
if n==0:
forward(k)
else:
for angle in (60,-120,60,0):
koch(n-1,k/3)
left(angle)
up()
goto(-150,90)
down()
koch(3,300)
right(120)
koch(3,300)
right(120)
koch(3,300)
二、tkinter模块:
Tkinter(Tk interface)图形库是Tk图形用户界面工具包的接口,通过定义一些类和方法实现了在Python中使用Tk的编程接口。Tkinter图形库由若干模块组成,_tkinter、tkinter和tkinter.constants等,其中tkinter是主模块、_tkinter是二进制扩展模块、tkinter.constants中定义了很多常量并在导入tkinter时自动导入。
from tkinter import *
1. 创建主窗口:
主窗口是一个顶层窗口,所有图形都是在这个窗口中绘制的。导入tkinter模块后,接下来要使用Tk类的无参构造函数创建主窗口:
tk=Tk()
主窗口有自己的属性,如宽度width、高度height、背景颜色bg(或background)等,也有自己的方法。设置主窗口属性的设置为:
tk['width']=300
tk['height']=200
tk['bg']='red'
主窗口默认的窗口标题是tk,可以通过调用窗口对象的title()方法来设置:
tk.title('主窗口')
也可以通过主窗口的geometry()方法来设置窗口大小和位置:
tk.geometry("200x100-0+0")
geometry()方法中,参数的一般形式为“宽度x高度±m±n”,“宽度x高度”用于指定主窗口的尺寸,“±m±n”用于指定主窗口的位置,+m为主窗口距屏幕左边的距离,-m为主窗口右边距屏幕右边的距离,+n为主窗口上边距屏幕上边的距离,-n为主窗口下边距主窗口下边的距离。
可以通过主窗口对象的resizable()方法来设置窗口的长度、宽度是否可以变化:
tk.resizable(width=False,height=True)
语句执行后,主窗口宽度不可变,高度可变,默认值都为True,即长度和宽度均可变。
2. 画布对象的创建:
画布canvas就是用来绘图的区域,tkinter模块的绘图操作都是通过画布进行的。创建画布:
c=Canvas(tk, width=300, height=200, bg='white')
通过Canvas类的构造函数创建一个画布对象,并对属性进行设置。画布对象常用属性有画布高度height、画布宽度width和画布背景色bg(或background)等,需要在创建画布时进行设置。如果创建画布时不设置,则取默认值,bg默认值为浅灰色。
虽然创建了画布对象c,但在主窗口中还不能看到,需要使用语句:
c.pack()
然后才能在窗口中看到画布。
3. 画布中的坐标系:
tkinter模块为画布建立了坐标系,以画布左上角为原点,从原点水平向右为x轴,从原点垂直向下为y轴。画布坐标使用整数,单位为像素,但tkinter模块也支持字符串形式给出的其他度量单位的长度值,如5c表示5厘米,50m表示50毫米,2i表示2英寸的,等。
4. 图形对象的标识:
画布中图形对象采用标识号和标签tag方法进行标识,标识号是创建图形对象时自动为图形对象赋予的整数编号,标签则是对图形对象命名。一个图形对象可以有多个名字,不同图形对象可以有相同的名字。为图形对象指定tags有三种方法。
·创建图形时利用tags属性指定标签,可设为单个字符串,或设置为字符串元组
·创建图形后利用画布的itemconfig()方法对tags属性进行设置
·利用画布的addtag_withtag()方法为图形对象添加新标签
id1=c.create_rectangle(10,10,100,50,tags="No1")
id2=c.create_rectangle(20,30,200,100,tags=("myRect","No2")
c.itemconfig(id1,tags=("myRect","Rect1"))
c.addtag_withtag("ourRect","Rect1"))
画布还预定义了ALL或all标签,此标签与画布上的所有图形对象相关联。
5. 图形对象的通用操作方法:
画布对象还提供了很多方法用于对画布上的图形对象进行各种操作。
⑴gettags():用于获取给定图形对象的所有标签
print(c.gettags(id1)) # ('myRect','Rect1','ourRect')
⑵find_withtag()方法:用于获取与给定标签相关联的所有图形对象
print(c.find_withtag("Rect1")) # (1,)
print(c.find_withtag("all")) # (1,2)
⑶delete()方法:用于从画布上删除指定的图形对象
c.delete(id1)
⑷move()方法:用于在画布上移动指定图形。
c.move(id2,10,20) # 将id2对应图形在x方向移动10像素,y方向移动20像素
6. tkinter中的颜色表示:
颜色可以使用字符串表示,这些颜色有red、yellow、green、blue、gray、cyan、magenta、white、black等。颜色还具有不同的深浅,比如使用red1、red2、red3、red4表示颜色逐渐加深。
计算机中常用三原色模型表示颜色,一般使用十六进制字符串加前缀#表示,有三种形式,#rgb、#rrggbb、#rrrgggbbb。
7. 画布绘图:
画布对象提供了多种方法,用来在画布上绘制各种图形。绘制图形前,需要先导入tkinter模块、创建窗口、创建画布并使画布可见:
from tkinter import *
tk=Tk()
c=Canvas(tk, width=300, height=200, bg='white')
c.pack()
⑴ create_rectangle()方法:创建矩形
c.create_rectangle(x0,y0,x1,y1,attr......)
其中,(x0,y0)是矩形左上角坐标,(x1,y1)是矩形右上角坐标。此方法返回一个所创建的矩形标识号,可以将此标识号赋值给一个变量,以便以后引用。
创建矩形可以同时设置一些属性:
·outline:矩形边框颜色,默认黑色,如果设置为空字符串则不显示边框,即透明边框。
·width:边框的宽度,默认1像素。
·dash:边框设置为虚线,值为元组,最简单为二元组(a,b),a指定画的像素,b指定跳过的像素,如此重复。若a与b相等,可以简记为(a,)或a。
·fill:矩形内部填充的颜色,默认空串,即内部透明。
·stipple:填充的点刻效果,可以取gray12、gray25、gray50、gray75等值。
·state:设置图形的显示状态,默认NORMAL或normal,即正常显示,如果设置为HIDDEN或hidden则使图形不可见。可以使图形在NORMAL和HIDDEN状态间交替变化以形成闪烁效果。属性值使用大写时不要加引号,而使用小写字母则需要加引号。
绘制矩形方法中的坐标值,可以使用元组形式传入,使用两个二元组或一个四元组比较常见:
p1=(10,10);p2=(150,100);pp=(50,60,100,150)
c.create_rectangle(p1,p2)
c.create_rectangle(pp)
⑵ create_oval()方法:绘制椭圆,特例是圆
椭圆的位置和尺寸由外接矩形决定,设外接矩形左上角坐标(x0,y0)和右下角坐标为(x1,y1)。
c.create_oval(x0,y0,x1,y1,attr......)
与矩形相似,椭圆属性也有outline、width、dash、fill、state和tags等,itemconfig()、delete()和move()方法也同样适用。
⑶ create_arc()方法:绘制圆弧
通过定义外接矩形的左上角和右下角确定弧线所在的椭圆,在属性中设置角度等参数。
create_arc(x0,y0,x1,y1,attr......)
弧线的开始位置由属性start定义,值为角度,默认为0;弧线结束位置由属性extent定义,表示从开始位置逆时针旋转的角度,默认为90°。如果start设置为0,extent设置为360,则画出一个完整的椭圆。
属性style设置弧线的样式,PIESLICE是扇形,即弧线两端与圆心相连,是默认值;ARC是弧,即椭圆上的一段;CHORD是弓形,即弧加连接弧两端的弦。
弧线也有属性outline、width、dash、fill、state和tags等,itemconfig()、delete()和move()方法也同样适用。
⑷ create_line()方法:绘制线条
用于在画布上创建连接多个点的线段序列。
create_line(x0,y0,x1,y1,...,xn,yn,attr......)
没有特别说明时,相邻两点之间用直线连接,绘制一条折线。如果设置smooth属性为非0值,各点作为B样条的顶点绘制成为平滑曲线。
线条可以使用arrow属性设置箭头,默认为NONE,无箭头;设置为FIRST,箭头在(x0,y0)端;设置为LAST,箭头在(xn,yn)端;设置为BOTH,则两端都有箭头。
属性arrowshape用于描述箭头形状,值为三元组(d1,d2,d3),表示半个箭头的直角三角形的三个边的长度,d2为斜边,默认值为(8,10,3)。
线条也有属性width、dash、state和tags等,itemconfig()、delete()和move()方法也同样适用。
⑸ create_polygon()方法:绘制多边形
多边形是用一系列顶点的坐标定义的,系统将这些点按次序连接起来,最后一个顶点会与第一个顶点连接,从而形成封闭的形状。
create_polygon(x0,y0,x1,y1,...,attr......)
多边形的outline属性默认为空,即边框不可见;fill属性默认为black。默认情况下,是使用直线连接顶点,如果smooth属性设置为非0值,则用B样条曲线连接顶点,形成平滑曲线围成的图样。
多边形也有属性width、dash、state和tags等,itemconfig()、delete()和move()方法也同样适用。
8. 显示文本和图像:
⑴create_text()方法:用于在画布上显示一行或多行文本
create_text(x,y,attr......)
(x,y)指定文本的参考位置,返回值是创建的文本标识号。文本内容由text属性设置,可以加入换行符\n,实现多行显示。
anchor属性指定文本的哪个锚点与显示位置(x,y)对齐,tkinter模块为边界框定义了若干个锚点,用E(东)、S(南)、W(西)、N(北)、CENTER(中)、SE(东南)、SW(西南)、NW(西北)、NE(东北)等方位常量来表示。通过锚点可以控制文本的相对位置。
fill属性用于设置文本颜色,默认黑色,如果为空串则文本不可见;justify属性用于控制多行文本的对齐方式,值为LEFT、CENTER、RIGHT,默认LEFT;width属性用于控制文本的宽度,超出宽度要换行;font属性指定文本总体,字体描述使用三元组,包含字体名称、大小和字形名,如("Times New Roman",10,"bold")、("宋体",12,"italic")。
其他还有state、tags属性,itemconfig()、delete()和move()方法也同样适用。
⑵PhotoImage类:
tkinter模块土官PhotoImage类来创建图像对象。
image=PhotoImage(file=image_name)
属性file用于指定图像文件,支持gif、png、bmp、pgm、ppm等格式;返回值是一个图像对象,一般用一个变量来引用这个对象。
⑶create_image()方法:在画布上显示图像
create_image(x,y,image=图像对象,attr......)
(x,y)是决定图像显示位置的参考点,也使用anchor属性指定图像对象的哪个锚点与显示位置(x,y)对齐。其他还有state、tags属性,itemconfig()、delete()和move()方法也同样适用。
9. 图形用户界面控件:
Python图形用户界面包括一个主窗口,主窗口中又包含各种控件,主窗口和各种控件都是对象,都具有属性和方法。创建图形用户界面程序需要以下步骤:
·创建主窗口
·在主窗口中添加各种控件并设置其属性
·调整对象的位置和大小
·为控件定义事件处理程序
·进入主事件循环
⑴创建主窗口:
创建主窗口一般使用显式方法tk=Tk(),但如果程序没有创建而直接去创建其他控件,系统也会自动创建主窗口。示例:
lb1=Label(text="Python")
⑵在主窗口中添加各种控件:
tkinter模块中定义了许多控件,利用这些控件类的构造函数可以创建控件对象。常用控件:
·Label:标签,用于显示说明文字
·Message:消息,可以显示多行文本
·Button:按钮,用于执行命令
·Radiobutton:单选按钮,用于从多个选项中选择一个
·Checkbutton:复选框,用于表示是否选择某个选项
·Entry:单行文本框,用于输入及编辑一行文本
·Text:多行文本框,用于显示和编辑多行文本,支持嵌入图像
·Frame:框架,是容器控件,用于控件组合与界面布局
·Listbox:列表框,用于显示若干选项
·Scrollbar:滚动条,用于滚动显示更多内容
·OptionMenu:可选项,单击可选项按钮时会打开选项列表
·Scale:刻度条,允许用户通过移动滑块来选择数值
·Menu:菜单,用于创建下拉式菜单或弹出式菜单
·Toplevel:顶层窗口,是容器控件,用于多窗口应用程序
·Canvas:画布,用于绘图
⑶修改控件对象属性:
每个控件都是对象,创建对象时设置的各种参数都是对象的属性,如标签的text属性。控件有很多属性,在用构造函数创建控件对象时可以为设置一些属性值,而没有设置的属性值都有默认值。
控件对象的属性值可以在创建时,指定,也可以在将来设置或修改。每种控件类都提供了configure()方法,可简写为config(),用于修改属性值。示例:
aLabel.config(text="Goodbye")
tkinter模块还提供了另一种修改控件属性值的方法,将对象视为一个字典,该字典以属性名为键,属性值为键对应的值,按照字典修改值的语法。示例:
aLabel["text"]="Goodbye"
用字典方法每次只能修改一个属性值,而用config()方法一次可以修改多个属性的值。示例:
aLabel.config(text="Googbye",fg="red",bg="blue")
⑷调整对象的位置和大小:
调用对象的pack()、grid()、place()方法,通过布局管理器来调整其位置和大小。大多数空间在创建之后并不会立即显示在主窗口中,必须经由布局管理器进行布置之后才变成可见的,因此多数控件都要经历创建和布局两个步骤。
⑸为控件定义事件处理程序:
用户操作会引发事件,如果控件绑定了事件处理程序,则在控件上发生该事件时会调用相应的事件处理程序。
⑹进入主事件循环:
最后调用主窗口的mainloop()方法,进入主事件循环,准备处理事件。除非用户关闭窗口,否则程序将一直处于主循环中。
10. 提示性控件:
标签label和消息message用来在窗口中显示文本信息,是提示性控件。
⑴标签Label:
Label类用来创建标签控件,创建时需要指定父控件和文本内容。示例:
aLabel=Label(tk, text="Hello!")
上述代码虽然创建了一个标签控件,但不可见。为了让控件可见,需要调用布局管理器对该控件进行位置安排,要使用pack()、grid()或place()方法。示例:
aLabel.pack()
pack有打包的意思,即所有对象以紧凑方式布置。
标签控件还有其他一些属性,font属性指定文本字体,使用一个三元组,包含字体名、尺寸、字形名,常用英文字体有Arial、Verdana、Helvetica、Times New Roman、Courier New、Comic Sans MS等,中文字体有宋体、楷体、仿宋、隶书等;字形有normal、bold、roman、italic、underline、overstrike等。示例:
Label(tk,text="Python",font=('Arial',12,'bold')).pack()
标签还有属性背景色bg或background、前景色fg或foreground、宽度width等。
⑵标签框架LabelFrame:
标签框架是带标签的矩形框,这是一个容器控件,其中可以容纳其他控件。示例:
lf=LabelFrame(tk,text"LableFrame")
⑶消息Message:
语法与标签基本一致。示例:
msg=Message(tk,text="Hello!")
消息可以显示多行文本,如果宽度不够会自动换行显示。消息有aspect属性指定消息的宽高比,默认150.
11. 按钮控件Button:
按钮是图形界面中最常用的控件。示例:
btn=Button(tk,text="Quit",command=tk.quit)
按钮最重要的属性是command,用于指定按钮事件的处理函数。对按钮的操作是用鼠标单击,该函数就是单击按钮时要执行的函数。传递给command属性的是函数对象,函数名后不能加括号。按钮控件在窗口中的位置也需要用布局管理器来安排。
按钮控件还有其他一些属性,比如宽度width、高度height、文本颜色fg、背景颜色bg、还有边框属性bd或borderwidth,默认2像素;状态属性state,可选值正常NORMAL、激活ACTIVE、禁用DISABLED;边框3D效果属性relief,默认FLAT,其他可选值GROOVE、RAISED、RIDGE、SOLID、SUNKEN等。
12. 选择性控件:
⑴复选框Checkbutton:
用来提供一些选项供用户进行选择,可以选择多项。示例:
Checkbutton(tk,text="Python").pack()
实际使用时,通常将多个复选框组合成一组。如果程序中需要查询和设置选项的状态,可以使用variable属性将复选框与一个IntVar或StringVar类型的控制变量关联。示例:
v=IntVar()
Checkbutton(tk,text="Python",variable=v).pack()
程序中可以通过v.get()和v.set()来查询或设置复选框的状态。处于选中状态时,对应1或字符1;处于未选中状态时,对应0或字符0。
⑵单选按钮Radiobutton:
单选按钮用于多选一的场合,同组的单选按钮在任何时刻只能有一个被选中。示例:
Radiobutton(tk,text="Python").pack()
实际应用中,将若干个单选按钮组合成一组,使得每次只能有一个单选按钮被选中。为了实现单选按钮的组合,可以先创建一个IntVar或StringVar类型的控制变量,然后将同组的每个单选按钮的variable属性都设置成该控制变量。由于多个单选按钮共享一个控制变量,而控制变量每次只能取一个值,所以选中一个单选按钮就会导致取消另一个。
为了在程序中获取当前选中的单选按钮的信息,可以为同组中的每个单选按钮设置value属性的值。这样,当选中一个单选按钮时,控制变量即被设置为其value值,程序中即可通过控制变量的当前值来判断是哪个单选按钮被选中了。
Radiobutton(tk,variable=v,text=lst[i],value=str(i),command=callRad).pack()
⑶列表框Listbox:
Lostbox可以包含一个或多个选项供用户选择。使用列表框的insert()方法来向列表框添加一个选项,包括索引值和项目两个参数。索引值有ACTIVE和END两个特殊值,ACTIVE表示向当前选中的项前插入一个,END表示向列表框最后一项插入。示例:
lb=Listbox(tk)
for item in ['a','b','c']:
lb.insert(END,item)
lb.pack()
使用列表框的delete()方法可以删除选项,包括开始的索引和结束的索引两个参数,如果不指定结束索引,则只删除一个选项。示例:
lb.delete(0,END) # 删除所有项目
其他常用方法还有,size()方法得到当前列表的项目个数;selection_set()方法选中指定的项目;get()方法返回指定索引的项目;curselection()方法返回当前选项的索引;selection_includes()判断一个选项是否被选中。
列表框可以与变量绑定,通过变量来修改项目。
⑷滚动条Scrollbar:
Scrollbar用于移动选项的可见范围,可以单独使用,但一般情况下是与列表框、多行文本、画布等其他控件配合使用。滚动条分垂直滚动条和水平滚动条,默认创建垂直滚动条。
sb=Scrollbar(tk,orient=HORIZONTAL)
sb.set(0.5,1)
代码设置水平滚动条,方法set(0.5,1)设置滑块为滚动条的一半。
⑸可选项OptionMenu:
OptionMenu提供一个选项列表,平时是收拢状态,单击可以打开列表以供用户选择,被选中的选项显示出来。创建时需要使用两个必要参数,一个是当前值绑定的变量,提供是StringVar变量;另一个是提供可选的项目列表。当可选项与变量绑定后,直接使用给变量赋值的方法即可改变当前的值。示例:
v=StringVar()
v.set('d')
om=OptionMenu(tk,v,'a','b','c','d')
⑹刻度条Scale:
Scale用于在指定的范围内通过滑块来选择数值。创建时需要指定最小值、最大值和移动步距,也可以与变量绑定,也可以使用回调函数输出当前值。示例:
v=StringVar()
scl=Scale(tk,from_=0,to=100,resolution=0.1,orient=HORIZONTAL,\
variable=v,command=show)
scl.set(50)
scl.pack()
13. 文本框与框架控件:
文本框用于输入和编辑文本,输入过程中随时可以进行编辑,如光标定位、修改、插入等。Python的文本框包括单行文本框Entry和多行文本框Text。
框架Frame就是一种容器,用于将一组相关的基本控件组合成为一个复合控件。利用框架对窗口进行模块化分隔,看建立复杂的图形用户界面。每个框架都是一个独立的区域,可以独立地对其包含的控件进行布局。
⑴单行文本框Entry:
Entry类可以实现单行文本的输入和编辑。示例:
Entry(tk).pack()
语句运行后在窗口中出现一行空白区域,单击此区域后会出现一个闪烁的光标,这时就可以在其中输入文本了。
当用户输入数据后,应用程序需要获取用户的输入,以便对数据进行处理。可以通过Entry对象的textvariable属性将文本框与一个StringVar类型的控制变量相关联。示例:
v=StringVar()
ety=Entry(tk,textvariable=v)
ety.pack()
然后就可以通过v.get()来获取文本中的内容。还可以通过v.set()来设置文本框的内容。
很多应用程序利用文本框作为用户登录系统时用户名和密码的界面元素,其中密码一般用*替代,只需要将文本框对象show属性设置为“*”即可。示例:
ety.config(show='*')
⑵多行文本框Text:
Text控件支持多行文本输入与编辑。示例:
txt=Text(tk)
txt.pack()
运行后在窗口中出现了一个多行空白区域,在此区域可输入、编辑多行文本。多行文本框提供了文本获取、删除、插入和替换等功能。
·txt.get(index1,index2):获取指定范围的文本
·txt.delete(index1,index2):删除指定范围的文本
·txt.insert(index,text):在index位置插入指定文本
·txt.replace(index1,index2,text):替换指定范围的文本
这些方法中,index代表文本的位置,格式为“行标号.列标号”,行标号从1开始,列标号从0开始,1.0表示第一行第一列。index也可以使用位置标签,INSERT表示光标的插入点;CURRENT代表鼠标的当前位置;END代表文本框的最后一个字符之后的位置;SEL_FIRST代表选中文本域的第一个字符,如果没有选中区域会引发错误;SEL_LAST代表选中文本域的最后一个字符,如果没有选中区域会引发错误。
多行文本还支持剪贴板操作、操作撤销与重做等功能。
⑶框架Frame:
Frame类用来创建框架控件,框架的宽度和高度分别用width和height属性来设置;框架的边框粗细使用bd或border、borderwidth属性来设置,默认值为0;边框的3D风格用relief属性来设置。示例:
f=Frame(tk,width=300,height=400,bd=4,relief=GROOVE)
f.pack()
框架除了作为容器组合多个控件外,还用于图形界面的空间分隔或填充。
14. ttk子模块控件:
tkinter模块包括子模块ttk,其中有Combobox、Notebook、Progressbar、Separator、Sizegrip and Treeview等控件。ttk子模块的Style对象可以统一设置控件的样式,如设置每一个按钮的内边距padding和背景颜色background。示例:
style=ttk.Style()
style.configure("TButton",padding=5,background='yellow')
ttk.Button(text="Sample").pack()
15. 菜单:
菜单控件是一个由许多菜单项组成的列表,每个菜单项表示一条命令或一个选项。用户通过鼠标或键盘选择菜单项,以执行命令或选中选项。菜单项通常以相邻的方式放置在一起,形成窗口菜单栏,并且一般置于窗口顶端。还有一种上下文菜单,当用户在界面单击鼠标右键时才会弹出一个与单击对象相关的菜单。菜单还有级联形式,选中一个菜单项会展开另一个菜单。
⑴菜单Menu:
Menu类用于创建菜单控件,具体做法是先创建一个菜单控件对象,并与某个窗口进行关联,然后再为该菜单添加菜单项。与主窗口关联的菜单实际上构成了主窗口的菜单栏。示例:
tk=Tk()
m=Menu(tk)
tk.config(menu=m) # 与w['menu']=m等价,将菜单m布置于主窗口顶部
菜单项可以是简单命令、级联式菜单、复选框或一组单选按钮,分别使用add_command()、add_cascade()、add_checkbutton()、add_radiobutton()方法添加。为了使菜单结构清晰,可以使用add_separator()方法在菜单中添加分隔线。示例:
m.add_command(label="Plot", command=callback1) # 绑定回调函数
m.add_cascade(label="Help",menu=helpmenu) # 加子菜单
菜单不需要使用布局管理器来使之可见,tkinter模块会自动布局并显示菜单。
⑵上下文菜单:
上下文菜单也称快捷菜单,通过鼠标右键点击某个对象而弹出。创建上下文菜单先要创建菜单,然后绑定对象的鼠标右键点击事件,并在事件处理函数中弹出菜单。示例:
def popup(event):
m.post(event.x_root, event.y_root) # 在鼠标邮件位置显示菜单
tk.bind('<Button-3>', popup)
绑定鼠标右键事件,右击时调用popup()函数。这里与菜单绑定的是主窗口tk,也可以设置为其他的控件,在绑定的控件上右击就可以弹出菜单。
16. 顶层窗口控件:
tkinter模块支持多窗口应用,除创建一个主窗口外,还可以创建顶层窗口。顶层窗口的外观与主窗口一样,可以独立地移动和改变大小,并且不需要像其他控件那样必须在主窗口中进行布局后才能显示。一个应用程序只能有一个主窗口,但可以创建任意多个顶层窗口。
tkinter模块提供Toplevel类用于创建顶层窗口控件。示例:
top=Toplevel()
Label(top, text="world").pack()
代码一般在创建主窗口后,创建一个顶层窗口,又在顶层窗口中创建了一个标签。虽然创建顶层窗口时没有指定主窗口为父控件,但顶层窗口确实是主窗口的子控件,关闭主窗口,包含顶层窗口在内的整个界面都会关闭。即使在没有主窗口情况下直接创建顶层窗口,系统也会自动先创建主窗口。
可以定义Toplevel类的title()和geometry()方法来设置其标题和大小。示例:
top.title('顶层窗口')
top.geometry('400x300')
也可以为顶层窗口创建菜单,方法与在主窗口中创建菜单类似。
17. 对象的布局方式:
布局指的是子控件在父控件中的位置安排,tkinter模块提供了3种布局管理器,pack、grid和place。
⑴pack布局管理器:
pack布局管理器将所有控件组织为一行或一列,默认的布局方式是根据控件创建的顺序将控件自上而下地添加到父控件中,可以使用side、fill、expend、ipadx/ipady、padx/pady等属性对控件的布局进行控制。
·side属性:改变控件的排列位置,LEFT居左放置,RIGHT居右放置
·fill属性:设置填充控件,取值X则在x方向填充,取值Y则在y方向填充,取值BOTH在x、y两个方向上填充,取值NONE则不填充
·expand属性:指定如何使用额外的空白空间,取值1则随父控件的大小而变化,取值0则子控件大小不能扩展
·ipadx/ipady属性:设置控件内部在x/y方向的间隙
·padx/pady属性:设置控件外部在x/y方向的间隙
示例:
Lbl1.pack(expand=1,side=LEFT,ipadx=20)
Lbl2.pack(fill=BOTH,expand=1,side=LEFT,padx=10)
Lbl3.pack(fill=X,expand=0,side=RIGHT,padx=10)
⑵grid布局管理器:
grid布局管理器将窗口或框架视为一个由行和列构成的二维列表,并将控件放入行列交叉处的单元格中。
grid布局管理器使用选项row和column指定行、列编号。编号从0开始,row默认值为当前空行,column默认值总为0.可以在布置控件时使用不连续的行、列号,就预留了一些行列,但预留的行列是不可见的。
grid()方法的sticky选项用来改变对齐方式,具体方位值使用N、S、E、W、CENTER,分别代表上、下、左、右、中心,也可以使用NE、SE、NW、SW,分别代表右上、右下、左上、左下。将sticky选项设置为某个方位,就表示将控件沿单元格的某条边或某个角对齐。
如果控件比单元格小,未能填满单元格,则可以指定如何处理多余空间,比如在水平方向或垂直方向上拉伸控件以填满单元格。可以利用方位值的组合来延伸控件,例如将sticky设置为E+W,则控件将在水平方向上延伸,占满单元格的宽度;若设置为E+W+N+S,或NW+SE,则控件将在水平和垂直两个方向上延伸,占满整个单元格。
如果想让一个控件占据多个单元格,可以使用grid()方法的rowspan和columnspan选项来指定在行和列方向上的跨度。示例:
label.grid(row=2,column=1,sticky=W+E+N+S,padx=5,pady=5)
⑶place管理器:
place布局管理器直接指定控件在父控件中的位置坐标。使用这种布局,要先创建控件,然后调用控件的place()方法,使用选项x和y设定坐标。父控件的左上角为(0,0),x轴方向向右,y轴方向向下。
坐标(x,y)是一个点,控件是一个矩形,place布局管理器利用方位值指定子控件的锚点,使用anchor选项来将子控件的锚点定位于父控件的指定坐标处,anchor默认值NW,即控件左上角。示例:
Label(tk,text="Hello").place(x=0,y=0)
Label(tk,text="Hello").place(x=0,y=0,anchor=SE)
place布局管理器也可以使用相对坐标指定位置,相对坐标使用relx和rely属性设置,取值0~1,表示控件在父控件中的相对比例位置。使用相对坐标,当窗口大小改变时,控件位置将随之调整。示例:
Label(tk,text="Hello").place(relx=0.25,rely=0.5, anchor=SE)
place布局管理器还可以指定控件大小,可以通过width和height定义控件的绝对尺寸,也可以使用relwidth和relheight定义控件的相对尺寸,即相对于父控件两个方向上的比例值。
place布局管理器比较灵活,但使用比较繁琐,主要用于实现复合控件的定制布局。
18. 对话框:
应用程序可以使用对话框与用户进行交互。对话框是一个独立的顶层窗口,通常是在程序执行时根据需要弹出,用于从用户获取输入或者向用户显示信息。对话框有几种标准形式。
⑴messagebox子模块:
messagebox子模块提供一系列用于显示信息或进行简单对话的消息框,可通过调用askyesno()、askquestion()、askyesnocancel()、askokcancel()、askretrycancel()、showerror()、showinfo()、showwarning()来创建,从方法名称可以大致看出其中包含的按钮。示例:
ask=askyesno(title='消息框演示',message='是否继续?')
showinfo(title='信息提示',message='继续')
⑵filedialog子模块:
此模块提供文件浏览、打开和保存的对话框,看通过askopenfilename()、asksaveasfilename()等方法来创建。示例:
askopenfilename(title='文件对话框', filetypes=[('Python源文件','.py')])
⑶colorchooser子模块:
此模块提供用于选择颜色的对话框,通过askcolor()来创建。示例:
askcolor(title='颜色对话框')
19. 图形事件处理:
事件event是指在程序执行过程中发生的操作,如单击鼠标左键、按下键盘上某键等。某个对象可以与特定事件绑定在一起,当特定事件发生时就可以调用特定的函数来处理这个事件。画布及画布上的图形都是对象,都可以与操作事件绑定,这样用户就可以利用键盘、鼠标来操作,控制画布和图形。
⑴事件的描述:
tkinter事件使用特定形式的字符串来描述。一般形式:
<修饰符>-<类型符>-<细节符>
其中,修饰符用于描述鼠标的单击、双击,以及键盘组合按键等;类型符指定事件类型,最常用的类型有表示鼠标事件的Button和键盘事件的Key;细节符指定具体的鼠标键或键盘按键,如鼠标的左、中、右键分别用1、2、3表示,键盘按键用相应字符或按键名称表示。修饰符和细节符是可选的,而且事件经常可以使用简化形式,如<Double-Button-1>表示双击鼠标左键。
常用鼠标事件有:
·<ButtonPress-1>:按下鼠标左键,可简写为<Button-1>或<1>
·<ButtonPress-2>:按下鼠标中键,可简写为<Button-2>
·<ButtonPress-3>:按下鼠标右键,可简写为<Button-3>
·<B1-Motion>:按下鼠标左键并移动鼠标
·<B2-Motion>:按下鼠标中键并移动鼠标
·<B3-Motion>:按下鼠标右键并移动鼠标
·<Double-Button-1>:双击鼠标左键
·<Enter>:鼠标指针进入控件
·<Leave>:鼠标指针离开控件
常用键盘事件:
·<KeyPress-a>:按下a键,可简写为<Key-a>或a,可显示字符(字母、数字、标点符号)都可以这样使用,但空格键对应<space>,小于号对应<less>
·<Return>:按下回车键,不可显示字符都可以使用<键名>表示对应事件,如<Tab>、<Shift_I>、<Control_R>、<Up>、<Down>、<F1>等
·<Key>:按下任意键
·<Shift-Up>:同时按下Shift和Up键,类似的还有Alt组合键、Ctrl组合键
⑵事件对象:
每个事件都导致系统创建一个事件对象,并将该对象传递给事件处理函数。事件对象具有描述事件的属性。常用的属性有:
·x和y:鼠标单击位置相对于控件左上角的坐标,单位像素
·x_root和y_root:鼠标单击位置相对于屏幕左上角的坐标,单位像素
·num:单击的鼠标键号,1、2、3分别表示左、中、右键
·char:如果按下可显示字符集,此属性是对应字符;如果按下不可显示键,此属性为空串。
·keysym:如果按下可显示字符键,此属性为该字符;如果按下不可显示键,此属性设置为该键的名称,回车键为Return、插入键为Insert、光标上移键为Up
·keycode:所按键的ASCII码,此方法无法得到上档键的ASCII码
·keysym_num:这是keysym的数值表示,对普通键来说就是ASCII码
⑶事件处理函数的一般形式:
事件处理函数是在触发了某个对象的事件时而调用执行的程序段,一般都带有一个event类型的形参,事件触发调用事件处理函数时,将传递一个事件对象。一般形式为:
def functionname(event):
pass
在函数体中可以调用事件对象的属性。事件处理函数在应用程序中定义,是由系统调用,一般称为回调callback函数。
⑷事件绑定:
tkinter模块中有4种不同的事件绑定方式。
·对象绑定和窗口绑定:
对象绑定是最常见的事件绑定方式,对象绑定只对该控件有效,对其他对象无效。使用bind()方法实现对象绑定,一般形式为:
控件对象.bind(事件描述符,事件处理程序)
绑定后,若控件对象发生了与事件描述符相匹配的事件,则调用事件处理程序。调用事件处理程序时,系统会传递一个event类的对象作为实际参数,该对象描述了所发生事件的详细信息。
对象绑定的特例是窗口绑定,此时绑定对窗口中的所有控件对象有效。示例:
tk.bind("<Button-1>",callback)
·类绑定和应用程序绑定:
类绑定针对控件类,对该类的所有对象有效,用任何对象的bind_class()方法实现。形式:
控件对象.bind_class(控件类描述符,事件描述符,事件处理函数)
示例:
b1=Button(tk,text="OK1")
b2=Button(tk,text="OK2")
b1.bind_class("Button","<Button-1>",callback)
应用程序绑定对应程序中的所有控件都有效,使用任意控件的bind_all()方法实现。形式:
控件对象.bind_all(事件描述符,事件处理程序)
⑸键盘事件与焦点:
焦点focus就是当前正在操作的对象。图形用户界面中有唯一的焦点,任何时刻可以通过对象的focus_set()方法来设置,也可以使用键盘上的Tab键来移动。键盘事件处理比鼠标事件处理多个一个焦点设置步骤。示例:
b1.focus_set()
tkinter中,可以通过Tab键来改变焦点,而鼠标点击不能改变焦点。
三、Graphics图形库:
Graphics图形库是在Tkinter图形库上建立的,由graphics模块组成,将tkinter模块的绘图功能重新包装,更容易使用。
1. 下载模块:
从http://mcsp.wartburg.edu/zelle/python下载
2. 导入模块:
from graphics import *
3. 创建图形窗口:
win=GraphWin("title",width,height)
在屏幕上创建的窗口,默认标题“Graphics Window”,默认宽高为200像素。
4. 关闭窗口:
win.close()
Graphics中,提供了GraphWin图形窗口类、Point点类、Line直线类、Circle圆类、Oval椭圆类、Rectangle矩形类、Polygon多边形类、Test文本类等,利用类创建相应图形对象。
5. 画点:
p=Point(x,y)
p.draw(win)
创建了一个Point对象,为了显示出来需要使用draw()方法。图形对象还有其他一些方法:
·p.getX():获得点的横坐标
·p.getY():获得点的纵坐标
·p.move(dx,dy):改变点的位置,水平移动dx,垂直移动dy
·p.setFill():设置点的颜色
·p.setOutline():设置边框的颜色
·p.undraw():隐藏对象p,可通过执行draw()方法重现
·p.clone():复制一个一样的对象
graphics除了可以使用字符串表示颜色,还可以用color_rgb(r,g,b)函数来设置颜色,其中数值范围为0~255。
6. 画直线:
line=Line(p1,p2)
其中p1、p2为Point对象。Line对象也支持draw()、undraw()、move()、setFill()、setOutline()、clone()等方法,此外还支持setArrow()方法用于为直线画箭头,setWidth()用于设置线宽。
7. 画圆:
c=Circle(p, radius)
p为圆形的Point对象,radius为数值,表示半径。Circle同样支持draw()、undraw()、move()、setFill()、setOutline()、clone()、setWidth()等方法,还支持getRadius()方法用于获取圆的半径。
8. 画椭圆:
o=Oval(p1,p2)
其中p1、p2为椭圆外接矩形的左上角和右下角坐标的Point对象,同样支持draw()、undraw()、move()、setFill()、setOutline()、clone()、setWidth()等方法。
9. 画矩形:
r=Rectangle(p1,p2)
其中p1、p2为矩形的左上角和右下角坐标的Point对象,同样支持draw()、undraw()、move()、setFill()、setOutline()、clone()、setWidth()等方法,还支持getP1()、getP2()、getCenter()方法。
10. 画多边形:
pg=Polygon(p1,p2,...,pn)
将连接各顶点的Point对象表示的点,组成多边形。多边形同样支持draw()、undraw()、move()、setFill()、setOutline()、clone()、setWidth()等方法,还支持getPoint()方法用于获取多边形各顶点坐标。
11. 文本:
t=Text(p,str)
p为表示中心点的Point对象,str是要显示的文本内容。文本对象支持draw()、undraw()、move()、setFill()、setOutline()、clone()等方法,其他方法有:setText(newstr)用于改变文本内容;getText()方法用于获取文本内容;setTextColor()方法用于设置文本颜色,与setFill方法相同;setFace()用于设置文本字体,可选值有helvetica、courier、time roman、arial;setSize()方法用于设置字体大小,取值5~36;setStyle()方法用于设置字体风格,可选值normal、bold、itatic、bold itatic;getAnchor()方法用于返回文本中间位置点的坐标值。
12. 捕捉鼠标单击事件:
通过GraphWin类的getMouse()方法获取用户在窗口内单击鼠标的信息,当此方法被GraphWin对象调用时程序停止并等待用户在窗口内单击鼠标,单击鼠标位置返回给程序:
from graphics import *
win=GraphWin()
p=win.getMouse()
print(p.getX(),p.getY())
13. 窗口键盘事件:
graphics模块包括一个输入对象Entry,用于获取窗口中的键盘输入事件。Entry对象在图形窗口中创建一个文本框其中内容可被用户修改。可以使用setText()和getText()方法。示例:
input1=Entry(Point(200,50),8)
四、Matplotlib模块:
Matplotlib提供了一套和MATLAB相似的命令API,适合交互式绘图,能保存为图像文件格式,也可以作为绘图控件嵌入GUI应用程序。详细介绍见:https://matplotlib.org
使用前需要导入模块:
import matplotlib.pyplot as plt
1)从数据列表绘制一条折线:
plt.plot([1,2,3,8,5])
plt.show()
2)绘制坐标轴:
plt.axis([0,5,-3,9]) # 坐标轴的最大值与最小值
plt.xlabel(u'X轴坐标 ',fontproperties=myfont) # 坐标轴标签
plt.ylabel(u'Y轴坐标',fontproperties=myfont)
plt.title(u'matplotlib演示图',fontproperties=myfont)
3)画出两个线图:
在一张图内画几个图形,可以使用不同的颜色,可以用b、g、r、c、m、y、k、w字母中的一个表示颜色,其中k表示黑色;也可以使用不同线条,用-、- -、-..、:符号,分别表示实线、虚线、点划线、点线;还能使用字符表示标记,有.、x、+、o、*。可以复合使用颜色、线型和标记,按上述顺序排列。
import matplotlib.pyplot as plt
import numpy as np
var=np.arange(0.,100,0.2)
cos_var=np.cos(var)
sin_var=np.sin(var)
plt.plot(var,cos_var,'b-*',label='cosine')
plt.plot(var,sin_var,'r-.',label='sine')
plt.legend(loc='upper left')
plt.xlabel('xaxis')
plt.ylabel('yaxis')
plt.title(r'Area of Circle')
plt.show()
图形中可以通过xlim和ylim方法设置x轴和y轴的坐标值范围。如plt.ylim(-2,2)。
4)画带图例的图:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,500)
y=np.sin(x)
z=np.cos(x*x)
plt.figure(figsize=(8,5))
plt.plot(x,y,label='$sin(x)$',color='red',linewidth=2)
plt.plot(x,z,'b--',label='$cos(x^2)$')
plt.xlabel('Time(s)') # 设置x标签
plt.ylabel('Volt')
plt.title('Sin and Cos figure using pyplot') # 设置标题
plt.ylim(-1.2,1.2)
plt.legend() # 设置图例
plt.show()
5)绘制散点图:
import numpy as np
import matplotlib.pyplot as plt
x=np.random.random(100)
y=np.random.random(100)
plt.scatter(x,y,s=x*500,c=u'r',marker=u'*')
plt.show()
6)画柱状图:
import matplotlib.pyplot as plt
import numpy as np
var=np.random.randn(5300)
plt.hist(var,530)
plt.title(r'Normal distribution ($\mu=0, \sigma=1$)')
plt.savefig('histogram.png')
plt.show()
可以把图形保存为图片文件,如plt.savefig('sample.png')。
7)画服从正态分布的直方图:
import matplotlib.pyplot as plt
import numpy as np
sample=np.random.normal(size=530)
plt.hist(sample,bins=15)
plt.title(r'Histogram Representing Gaussian Numbers')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()
8)画等高线图:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10.5,40)
y=np.linspace(1,8,30)
(X,Y)=np.meshgrid(x,y)
func=np.exp(-((X-2.5)**2+(Y-4)**2)/4)-np.exp(-((X-7.5)**2+(Y-4)**2)/4)
contr=plt.contour(x,y,func)
plt.clabel(contr)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
9)画矢量图:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,15,11)
y=np.linspace(0,10,13)
(X,Y)=np.meshgrid(x,y)
arr1=15*X
arr2=15*Y
main_plot=plt.quiver(X,Y,arr1,arr2,angles='xy',scale=1000,color='b')
main_plot_key=plt.quiverkey(main_plot,0,15,30,'30m/s',coordinates='data',color='b')
plt.xlabel('x in (km)')
plt.ylabel('y in (km)')
plt.show()
10)画饼图:
import numpy as np
import matplotlib.pyplot as plt
labels='Frags','Hogs','Dogs','Logs'
sizes=[15, 30, 45, 10]
colors=['yellowgreen','gold','#FF0000','lightcoral']
explode=(0, 0.1, 0, 0.1) # 使拼图中第2片和第4片裂开
fig=plt.figure()
ax=fig.gca()
ax.pie(np.random.random(4),explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',
shadow=True,startangle=90,radius=0.25,center=(0,0),frame=True)
ax.pie(np.random.random(4),explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',
shadow=True,startangle=90,radius=0.25,center=(1,1),frame=True)
ax.pie(np.random.random(4),explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',
shadow=True,startangle=90,radius=0.25,center=(0,1),frame=True)
ax.pie(np.random.random(4),explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',
shadow=True,startangle=90,radius=0.25,center=(1,0),frame=True)
ax.set_xticks([0,1]) # 设置坐标轴刻度
ax.set_yticks([0,1])
ax.set_xticklabels(['Sunny','Cloudy']) # 设置坐标轴刻度上显示的标签
ax.set_yticklabels(['Dry','Rainy'])
ax.set_xlim((-0.5,1.5)) # 设置坐标轴的跨度
ax.set_ylim((-0.5,1.5))
ax.set_aspect('equal') # 设置纵横轴比,以画成圆形
plt.show()
11)画三维曲线:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
mpl.rcParams['legend.fontsize']=10
fig=plt.figure()
ax=fig.gca(projection='3d')
theta=np.linspace(-4*np.pi,4*np.pi,100)
z=np.linspace(-4,4,100)*0.3
r=z**3+1
x=r*np.sin(theta)
y=r*np.cos(theta)
ax.plot(x,y,z,label='parametric curve')
plt.legend()
plt.show()
12)画三维图形:
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
x,y=np.mgrid[-2:2:20j, -2:2:20j]
z=50*np.sin(x+y)
ax=plt.subplot(111,projection='3d')
ax.plot_surface(x, y, z, rstride=2, cstride=1, cmap=plt.cm.Blues_r)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
13)输出结果:
画图结果可以输出为不同的文件格式,要把图形保存为文件有两种方法。
⑴直接使用屏幕上的保存按钮。
⑵在plt.show()方法前使用plt.savefig方法,可以设置输出文件的名称、样式与格式。
如果存为pdf文件,需要引入matplotlib.backends.backend_pdf.PdfPages,然后初始化pdf:
pdf=mpl.backends.backend_pdf.PdfPages('output.pdf')
绘图的plt.show()指令使用pdf.savefig();plt.close()来替代,而且可以连续输出多页,最后要使用pdf.close()关闭pdf。
Matplotlib模块主要用于科学计算等相关领域,会在科学计算、机器学习、人工智能等相关模块使用时配合使用,以直观方式画出图形。在此只做简单介绍。