graphics模块参考
1. GraphWin对象
- GraphWin(title,width,height) 构造一个新的图形窗口,用于在屏幕上绘图。
win = GraphWin("Investment Grownth", 640,480)
- plot(x,y,color) 在窗口中(x,y)处绘制像素。
win.plot(35,128,"blue")
- plotPixel(x,y,color) 在“原始”位置(x,y)处绘制像素,忽略setCoords设置的任何坐标变换
win.plotPixel(35,128,"blue")
- setBackground(color) 将窗口背景设置为给定的颜色。默认背景颜色取决于系统。
win.setBackground("white")
- close() 关闭屏幕窗口
win.close()
- getMouse() 暂停等待用户在窗口中单击鼠标,并用Point对象返回鼠标点击的位置
clickPoint = win.getMouse()
- checkMouse() 与getMouse()类似,但不会暂停等待用户单击。返回鼠标点击的最后一个点,如果自上次调用checkMouse或getMouse后未点击窗口,则返回None。(这对于控制动画循环特别有用)
clickPoint = win.checkMouse()
- getKey() 暂停等待用户在键盘上键入一个键,并返回一个表示被按下键的字符串
keyString = win.getKey()
- checkKey() 与getKey()类似,但不会暂停等待用户按下一个键。返回被按下的最后一个键,如果从上一次调用checkKey或getKey后没有按下任何键,则返回" "。(这对于控制简单的动画循环特别有用)
keyString = win.checkKey()
- setCoords(xll,yll,xur,yur) 设置窗口的坐标系。当前绘制的对象被重绘,而后续的绘制将相对于新的坐标系统(除plotPixel以外)
win.setCoords(0,0,200,100)
2.图形对象1
- setFill(color) 将对象的内部设置为给定的颜色
someObject.setFill("red")
- setOutline(color) 将对象的轮廓设置为给定的颜色
someObject.setOutline("yellow")
- setWidth(pixel) 将对象的轮廓宽度设置为所需的像素数。(不适用于Point)
someObject.setWidth(3)
- draw(aGraphWin) 将对象绘制到给定的GraphWin中并返回绘制对象。
someObject.draw(someGraphWin)
- undraw() 从图形窗口中擦除对象。如果对象当前未绘制,则不采取任何操作
someObeject.undraw()
- move(dx,dy) 在x方向上移动对象dx单位,在y方向上移动dy单位。如果对象当前已绘制,则将图像调整到新位置。
someObject.move(10,15.5)
- clone() 返回对象的副本。克隆始终以未绘制状态创建,除此之外,它们与被克隆的对象一样。
objectCopy = someObject.clone()
Point 方法
- Point(x,y) 构造具有给定坐标的点
aPoint = Point(3.5,8)
- get() 返回点的x坐标
xValue = aPoint.getX()
- getY() 返回点的y坐标
yValue = aPoint.getY()
Line 方法
- Line(point1,point2) 构造从point1到point2的线段
aLine = Line(Point(1,3),Point(7,4))
- setArrow(endString) 设置线段的箭头状态。 箭头可以在第一端点、最后端点或两个duandian行绘制。
aLine.setArrow("both")
- getCenter() 返回线段中点的克隆
midPoint = aLine.getCenter()
- getP1()、getP2() 返回线段中的对应端点的克隆
startPoint = aLine.getP1()
Circle方法
- Circle(centerPoint,radius) 构造具有给定圆心和半径的圆。
aCircle = Circle(Point(3,4),10.5)
- getCenter() 返回圆心的克隆
centerPoint = aCircle.getCenter()
- getRadius() 返回圆的半径
radius = aCircle.getRadius()
- getP1()、getP2() 返回圆的边界框的对应角落的克隆。它们是围绕圆的正方形的对角点
cornerPoint = aCircle.getP1()
Rectangle 方法
- Rectangle(point1,point2) 构造一个对角点在point1和point2的矩形
aRectangle = Rectangle(Point(1,3),Point(4,7))
- getCenter 返回矩形中心点的克隆
centerPoint = aRectangle.getCenter()
- gerP1()、getP2() 返回用于构造矩形的对应点的克隆
cornerPoint = aRectangle.getP1()
Oval 方法
- Oval(point1,point2) 在由point1 和point2确定的边界框中构造一个椭圆
anOval = Oval(Point(1,2),Point(3,4))
- getCenter() 返回椭圆形中心点的克隆
centerPoint = anOval.getCenter()
- getP1()、getP2() 返回用于构造椭圆的对应点的克隆
cornerPoint = anOval.getP1()
Polygon 方法
- Polygon(point1,point2,point3,…) 构造一个以给定点为顶点的多边形。也接受单个参数,即顶点的列表。
aPolygon = Polygon(Point(1,2),Point(3,4),Point(5,6))
aPolygon = Polygon([Point(1,2),Point(3,4),Point(5,6)])
- getPoints() 返回一个列表,包含用于构造多边形的点的克隆
pointList = aPolygon.getPoints()
Text 方法
- Text(anchorPoint,textString) 构造一个文本对象,显示以anchorPoint为中心的文本字符串。文本水平显示。
message = Text(Point(3,4),"Hello")
- setText(string) 将对象的文本设置为字符串
message.setText("Goodbye!")
- getText() 返回当前字符串
msgString = message.getText()
- getAnchor() 返回锚点的克隆
centerPoint = message.getAnchor()
- setFace(family) 将字体更改为给定的系列。可能值有“helvatica”、“courier”、“times”、“roman”和“arial”
message.setFace("arial")
- setSize(point) 将字体大小更改为给定的点大小,从5点到36点是合法的
message.setSize(7)
- setStyle(style) 将字体更改为给定的样式。可能值有“normal”、“bold”、“italic”和“bold italic”
message.setStyle("bold")
- setTextColor(color) 将文本的颜色设置为彩色。注意:setFill有同样的效果
message.setTextColor("pink")
3. Entry 对象
Entry对象支持通用的图形方法move()、draw(graphwin)、undraw()、setFill(color)和clone()。
特有方法如下:
- Entry(centerPoint,width) 构造具有给定中心点和宽度的Entry。宽度用可显示的文本字符数指定。
inputBox = Entry(Point(3,4),5)
- getAnchor() 返回输入框居中点的克隆
centerPoint = inputBox.getAnchor()
- getText() 返回当前在输入框中的文本字符串
inputStr = inputBox.getText()
- setText(string) 将输入框中的文本设置为给定字符串
inputBox.setText("32.0")
- setFace(family) 将字体更改为给定的系列。可能的值是“helvetica”、“courier”、“times roman”和“arial”
inputBox.setFace("courier")
- setSize(point) 将字体更改为给定的点大小。从5点到36点是合法的。
inputBox.setSize(12)
- setStyle(style) 将字体更改为给定的样式。可能的值有“normal”、“bold”、“italic”、“bold italic”
inputBox.setStyle("italic")
- setTextColor(color) 设置文本的颜色
inputBox.setTextColor("green")
4. 显示图像2
显示是使用Image对象完成的。图像支持通用方法move(dx,dy)、draw(graphwin)、undraw()和clone()。
Image特有的方法如下:
- Image(anchorPoint,filename) 利用给定文件的内容构造图像,以给定锚点为中心。也可以使用width和height参数而不是filename来调用。在这种情况下,将创建给定宽度和高度(以像素为单位)的空白(透明)图像。
flowerImage = Image(Point(100,100),"flower.gif")
blankImage = Image(320,240)
- getAnchor() 返回图像居中点的克隆
centerPoint = flowerImage.getAnchor()
- getWidth() 返回图像的宽度
widthInPixels = flowerImage.getWidth()
- getHeighh() 返回图像的高度
heighInPixels = flowerImage.getHeight()
- getPixel(x,y) 返回位置(x,y)处的像素的RGB值的列表[红,绿,蓝]。注意,像素位置是相对于图像本身的,而不是绘制图像的窗口。图像的左上角始终是像素(0,0)。
red,green,blue = flowerImage.getPixel(32,18)
- setPixel(x,y,color) 将位置(x,y)处的像素设置为给定颜色。 注意:这是一个缓慢的操作。
flowerImage.setPixel(32,18,"blue")
- save(filename) 将图像保存为文件。所得文件类型(如GIF或PPM)由文件名的扩展名确定
flowerImagae.save("mypic.ppm")
5. 生成颜色
- 颜色由字符串表示。
最常见的颜色,如“red”、“pruple”、“green”、“cyan”等,应该直接可用。许多颜色具有各种色调,例如“red1”、“red2”、“red3”、“red4”,这是越来越暗的红色。关于完整列表,可在网络上查找X11颜色名称3
- color_rgb(red,green,blue) 返回一个表示颜色的字符串,该颜色是指定的红色、绿色和蓝色的强度的混合。它们应该是在0-255范围内的int。因此,color_rgb(255,0,0)是亮红色,而(130,0,130)是中等品红色。
aCircle.setFill(color rgb(130,0,130))
控制显示更新(高级)
通常,每当任何图形对象的可见状态以某种方式改变时,GraphWin的可视显示就会更新。然而,在某种情况下,例如在一些交互式shell中使用graphics库时,可能需要强制窗口更新以便看到改变。update() 函数用于执行此操作
update() 导致所有挂起的图形操作得到执行,并显示结果
出于效率的原因,有时期望关闭每当一个对象改变时窗口所进行的自动更新。例如,在动画中,你可能需要在显示动画的下一“帧”之前更改多个对象的外观。GraphWin构造函数包括了一个名为autoflush 的特殊额外参数,用于控制这种自动更新。默认情况下,创建窗口时,自动更新将打开。要关闭它,autoflush参数应该设置为False,像这样:
win = GraphWin("My Animation",400,400,autoflush = False)
现在对win中对象的更改只会在图形系统由一些空闲时间通过调用update()强制更改时显示。
update()方法还接受一个可选参数,指定可以进行更新的最大速率(每秒)。这对于以独立于硬件的方式控制动画的速度是有用的。例如,将命令update(30)放置在循环的底部,确保循环将每秒“回转”最多30次。update命令将每次插入一个适当的暂停,以保持相对恒定的速率。当然,只在循环本身的执行少于1/30秒时,速率调节才起作用。
## 示例: 1000帧, 每秒30帧
win = GraphWin("Update Example", 320,200, autofulsh = False)
for i in range(1000):
# <drawing commands for ith frame>
update(30)