好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python安装graphics库

Python安装graphics库

打开cmd,输入 where python查询Python安装路径

进入Python安装路径中的Lib/site-packages文件夹中,添加 graphics.py 文件,将以下红色文本添加进graphics.py文件中即可

graphics.zip

#?graphics.py
"""Simple?object?oriented?graphics?library??
The?library?is?designed?to?make?it?very?easy?for?novice?programmers?to
experiment?with?computer?graphics?in?an?object?oriented?fashion.?It?is
written?by?John?Zelle?for?use?with?the?book?"Python?Programming:?An
Introduction?to?Computer?Science"?(Franklin,?Beedle?&?Associates).
LICENSE:?This?is?open-source?software?released?under?the?terms?of?the
GPL?(http://HdhCmsTestgnu.org/licenses/gpl.html).
PLATFORMS:?The?package?is?a?wrapper?around?Tkinter?and?should?run?on
any?platform?where?Tkinter?is?available.
INSTALLATION:?Put?this?file?somewhere?where?Python?can?see?it.
OVERVIEW:?There?are?two?kinds?of?objects?in?the?library.?The?GraphWin
class?implements?a?window?where?drawing?can?be?done?and?various
GraphicsObjects?are?provided?that?can?be?drawn?into?a?GraphWin.?As?a
simple?example,?here?is?a?complete?program?to?draw?a?circle?of?radius
10?centered?in?a?100x100?window:
--------------------------------------------------------------------
from?graphics?import?*
def?main():
????win?=?GraphWin("My?Circle",?100,?100)
????c?=?Circle(Point(50,50),?10)
????c.draw(win)
????win.getMouse()?#?Pause?to?view?result
????win.close()????#?Close?window?when?done
main()
--------------------------------------------------------------------
GraphWin?objects?support?coordinate?transformation?through?the
setCoords?method?and?pointer-based?input?through?getMouse.
The?library?provides?the?following?graphical?objects:
????Point
????Line
????Circle
????Oval
????Rectangle
????Polygon
????Text
????Entry?(for?text-based?input)
????Image
Various?attributes?of?graphical?objects?can?be?set?such?as
outline-color,?fill-color?and?line-width.?Graphical?objects?also
support?moving?and?hiding?for?animation?effects.
The?library?also?provides?a?very?simple?class?for?pixel-based?image
manipulation,?Pixmap.?A?pixmap?can?be?loaded?from?a?file?and?displayed
using?an?Image?object.?Both?getPixel?and?setPixel?methods?are?provided
for?manipulating?the?image.
DOCUMENTATION:?For?complete?documentation,?see?Chapter?4?of?"Python
Programming:?An?Introduction?to?Computer?Science"?by?John?Zelle,
published?by?Franklin,?Beedle?&?Associates.??Also?see
http://mcsp.wartburg.edu/zelle/python?for?a?quick?reference"""
#?Version?4.1?12/29/2009
#?????*?Merged?Pixmap?and?Image?class.?Old?Pixmap?removed,?use?Image.
#?Version?4.0.1?10/08/2009
#?????*?Modified?the?autoflush?on?GraphWin?to?default?to?True
#?????*?Autoflush?check?on?close,?setBackground
#?????*?Fixed?getMouse?to?flush?pending?clicks?at?entry
#?Version?4.0?08/2009
#?????*?Reverted?to?non-threaded?version.?The?advantages?(robustness,
#?????????efficiency,?ability?to?use?with?other?Tk?code,?etc.)?outweigh
#?????????the?disadvantage?that?interactive?use?with?IDLE?is?slightly?more
#?????????cumbersome.
#?????*?Modified?to?run?in?either?Python?2.x?or?3.x?(same?file).
#?????*?Added?Image.getPixmap()
#?????*?Added?update()?--?stand?alone?function?to?cause?any?pending
#???????????graphics?changes?to?display.
#
#?Version?3.4?10/16/07
#?????Fixed?GraphicsError?to?avoid?"exploded"?error?messages.
#?Version?3.3?8/8/06
#?????Added?checkMouse?method?to?GraphWin
#?Version?3.2.3
#?????Fixed?error?in?Polygon?init?spotted?by?Andrew?Harrington
#?????Fixed?improper?threading?in?Image?constructor
#?Version?3.2.2?5/30/05
#?????Cleaned?up?handling?of?exceptions?in?Tk?thread.?The?graphics?package
#?????now?raises?an?exception?if?attempt?is?made?to?communicate?with
#?????a?dead?Tk?thread.
#?Version?3.2.1?5/22/05
#?????Added?shutdown?function?for?tk?thread?to?eliminate?race-condition
#????????error?"chatter"?when?main?thread?terminates
#?????Renamed?various?private?globals?with?_
#?Version?3.2?5/4/05
#?????Added?Pixmap?object?for?simple?image?manipulation.
#?Version?3.1?4/13/05
#?????Improved?the?Tk?thread?communication?so?that?most?Tk?calls
#????????do?not?have?to?wait?for?synchonization?with?the?Tk?thread.
#????????(see?_tkCall?and?_tkExec)
#?Version?3.0?12/30/04
#?????Implemented?Tk?event?loop?in?separate?thread.?Should?now?work
#????????interactively?with?IDLE.?Undocumented?autoflush?feature?is
#????????no?longer?necessary.?Its?default?is?now?False?(off).?It?may
#????????be?removed?in?a?future?version.
#?????Better?handling?of?errors?regarding?operations?on?windows?that
#???????have?been?closed.
#?????Addition?of?an?isClosed?method?to?GraphWindow?class.
#?Version?2.2?8/26/04
#?????Fixed?cloning?bug?reported?by?Joseph?Oldham.
#?????Now?implements?deep?copy?of?config?info.
#?Version?2.1?1/15/04
#?????Added?autoflush?option?to?GraphWin.?When?True?(default)?updates?on
#????????the?window?are?done?after?each?action.?This?makes?some?graphics
#????????intensive?programs?sluggish.?Turning?off?autoflush?causes?updates
#????????to?happen?during?idle?periods?or?when?flush?is?called.
#?Version?2.0
#?????Updated?Documentation
#?????Made?Polygon?accept?a?list?of?Points?in?constructor
#?????Made?all?drawing?functions?call?TK?update?for?easier?animations
#??????????and?to?make?the?overall?package?work?better?with
#??????????Python?2.3?and?IDLE?1.0?under?Windows?(still?some?issues).
#?????Removed?vestigial?turtle?graphics.
#?????Added?ability?to?configure?font?for?Entry?objects?(analogous?to?Text)
#?????Added?setTextColor?for?Text?as?an?alias?of?setFill
#?????Changed?to?class-style?exceptions
#?????Fixed?cloning?of?Text?objects
#?Version?1.6
#?????Fixed?Entry?so?StringVar?uses?_root?as?master,?solves?weird
#????????????interaction?with?shell?in?Idle
#?????Fixed?bug?in?setCoords.?X?and?Y?coordinates?can?increase?in
#???????????"non-intuitive"?direction.
#?????Tweaked?wm_protocol?so?window?is?not?resizable?and?kill?box?closes.
#?Version?1.5
#?????Fixed?bug?in?Entry.?Can?now?define?entry?before?creating?a
#?????GraphWin.?All?GraphWins?are?now?toplevel?windows?and?share
#?????a?fixed?root?(called?_root).
#?Version?1.4
#?????Fixed?Garbage?collection?of?Tkinter?images?bug.
#?????Added?ability?to?set?text?atttributes.
#?????Added?Entry?boxes.
import?time,?os,?sys
try:??#?import?as?appropriate?for?2.x?vs.?3.x
???import?tkinter?as?tk
except:
???import?Tkinter?as?tk
##########################################################################
#?Module?Exceptions
class?GraphicsError(Exception):
????"""Generic?error?class?for?graphics?module?exceptions."""
????pass
OBJ_ALREADY_DRAWN?=?"Object?currently?drawn"
UNSUPPORTED_METHOD?=?"Object?doesn't?support?operation"
BAD_OPTION?=?"Illegal?option?value"
DEAD_THREAD?=?"Graphics?thread?quit?unexpectedly"
_root?=?tk.Tk()
_root.withdraw()
def?update():
????_root.update()
############################################################################
#?Graphics?classes?start?here
????????
class?GraphWin(tk.Canvas):
????"""A?GraphWin?is?a?toplevel?window?for?displaying?graphics."""
????def?__init__(self,?title="Graphics?Window",
?????????????????width=200,?height=200,?autoflush=True):
????????master?=?tk.Toplevel(_root)
????????master.protocol("WM_DELETE_WINDOW",?self.close)
????????tk.Canvas.__init__(self,?master,?width=width,?height=height)
????????self.master.title(title)
????????self.pack()
????????master.resizable(0,0)
????????self.foreground?=?"black"
????????self.items?=?[]
????????self.mouseX?=?None
????????self.mouseY?=?None
????????self.bind("<Button-1>",?self._onClick)
????????self.height?=?height
????????self.width?=?width
????????self.autoflush?=?autoflush
????????self._mouseCallback?=?None
????????self.trans?=?None
????????self.closed?=?False
????????master.lift()
????????if?autoflush:?_root.update()
?????
????def?__checkOpen(self):
????????if?self.closed:
????????????raise?GraphicsError("window?is?closed")
????def?setBackground(self,?color):
????????"""Set?background?color?of?the?window"""
????????self.__checkOpen()
????????self.config(bg=color)
????????self.__autoflush()
????????
????def?setCoords(self,?x1,?y1,?x2,?y2):
????????"""Set?coordinates?of?window?to?run?from?(x1,y1)?in?the
????????lower-left?corner?to?(x2,y2)?in?the?upper-right?corner."""
????????self.trans?=?Transform(self.width,?self.height,?x1,?y1,?x2,?y2)
????def?close(self):
????????"""Close?the?window"""
????????if?self.closed:?return
????????self.closed?=?True
????????self.master.destroy()
????????self.__autoflush()
????def?isClosed(self):
????????return?self.closed
????def?isOpen(self):
????????return?not?self.closed
????def?__autoflush(self):
????????if?self.autoflush:
????????????_root.update()
????
????def?plot(self,?x,?y,?color="black"):
????????"""Set?pixel?(x,y)?to?the?given?color"""
????????self.__checkOpen()
????????xs,ys?=?self.toScreen(x,y)
????????self.create_line(xs,ys,xs+1,ys,?fill=color)
????????self.__autoflush()
????????
????def?plotPixel(self,?x,?y,?color="black"):
????????"""Set?pixel?raw?(independent?of?window?coordinates)?pixel
????????(x,y)?to?color"""
????????self.__checkOpen()
????????self.create_line(x,y,x+1,y,?fill=color)
????????self.__autoflush()
??????
????def?flush(self):
????????"""Update?drawing?to?the?window"""
????????self.__checkOpen()
????????self.update_idletasks()
????????
????def?getMouse(self):
????????"""Wait?for?mouse?click?and?return?Point?object?representing
????????the?click"""
????????self.update()??????#?flush?any?prior?clicks
????????self.mouseX?=?None
????????self.mouseY?=?None
????????while?self.mouseX?==?None?or?self.mouseY?==?None:
????????????self.update()
????????????if?self.isClosed():?raise?GraphicsError("getMouse?in?closed?window")
????????????time.sleep(.1)?#?give?up?thread
????????x,y?=?self.toWorld(self.mouseX,?self.mouseY)
????????self.mouseX?=?None
????????self.mouseY?=?None
????????return?Point(x,y)
????def?checkMouse(self):
????????"""Return?last?mouse?click?or?None?if?mouse?has
????????not?been?clicked?since?last?call"""
????????if?self.isClosed():
????????????raise?GraphicsError("checkMouse?in?closed?window")
????????self.update()
????????if?self.mouseX?!=?None?and?self.mouseY?!=?None:
????????????x,y?=?self.toWorld(self.mouseX,?self.mouseY)
????????????self.mouseX?=?None
????????????self.mouseY?=?None
????????????return?Point(x,y)
????????else:
????????????return?None
????????????
????def?getHeight(self):
????????"""Return?the?height?of?the?window"""
????????return?self.height
????????
????def?getWidth(self):
????????"""Return?the?width?of?the?window"""
????????return?self.width
????
????def?toScreen(self,?x,?y):
????????trans?=?self.trans
????????if?trans:
????????????return?self.trans.screen(x,y)
????????else:
????????????return?x,y
??????????????????????
????def?toWorld(self,?x,?y):
????????trans?=?self.trans
????????if?trans:
????????????return?self.trans.world(x,y)
????????else:
????????????return?x,y
????????
????def?setMouseHandler(self,?func):
????????self._mouseCallback?=?func
????????
????def?_onClick(self,?e):
????????self.mouseX?=?e.x
????????self.mouseY?=?e.y
????????if?self._mouseCallback:
????????????self._mouseCallback(Point(e.x,?e.y))?
??????????????????????
class?Transform:
????"""Internal?class?for?2-D?coordinate?transformations"""
????
????def?__init__(self,?w,?h,?xlow,?ylow,?xhigh,?yhigh):
????????#?w,?h?are?width?and?height?of?window
????????#?(xlow,ylow)?coordinates?of?lower-left?[raw?(0,h-1)]
????????#?(xhigh,yhigh)?coordinates?of?upper-right?[raw?(w-1,0)]
????????xspan?=?(xhigh-xlow)
????????yspan?=?(yhigh-ylow)
????????self.xbase?=?xlow
????????self.ybase?=?yhigh
????????self.xscale?=?xspan/float(w-1)
????????self.yscale?=?yspan/float(h-1)
????????
????def?screen(self,x,y):
????????#?Returns?x,y?in?screen?(actually?window)?coordinates
????????xs?=?(x-self.xbase)?/?self.xscale
????????ys?=?(self.ybase-y)?/?self.yscale
????????return?int(xs+0.5),int(ys+0.5)
????????
????def?world(self,xs,ys):
????????#?Returns?xs,ys?in?world?coordinates
????????x?=?xs*self.xscale?+?self.xbase
????????y?=?self.ybase?-?ys*self.yscale
????????return?x,y
#?Default?values?for?various?item?configuration?options.?Only?a?subset?of
#???keys?may?be?present?in?the?configuration?dictionary?for?a?given?item
DEFAULT_CONFIG?=?{"fill":"",
??????"outline":"black",
??????"width":"1",
??????"arrow":"none",
??????"text":"",
??????"justify":"center",
??????????????????"font":?("helvetica",?12,?"normal")}
class?GraphicsObject:
????"""Generic?base?class?for?all?of?the?drawable?objects"""
????#?A?subclass?of?GraphicsObject?should?override?_draw?and
????#???and?_move?methods.
????
????def?__init__(self,?options):
????????#?options?is?a?list?of?strings?indicating?which?options?are
????????#?legal?for?this?object.
????????
????????#?When?an?object?is?drawn,?canvas?is?set?to?the?GraphWin(canvas)
????????#????object?where?it?is?drawn?and?id?is?the?TK?identifier?of?the
????????#????drawn?shape.
????????self.canvas?=?None
????????self.id?=?None
????????#?config?is?the?dictionary?of?configuration?options?for?the?widget.
????????config?=?{}
????????for?option?in?options:
????????????config[option]?=?DEFAULT_CONFIG[option]
????????self.config?=?config
????????
????def?setFill(self,?color):
????????"""Set?interior?color?to?color"""
????????self._reconfig("fill",?color)
????????
????def?setOutline(self,?color):
????????"""Set?outline?color?to?color"""
????????self._reconfig("outline",?color)
????????
????def?setWidth(self,?width):
????????"""Set?line?weight?to?width"""
????????self._reconfig("width",?width)
????def?draw(self,?graphwin):
????????"""Draw?the?object?in?graphwin,?which?should?be?a?GraphWin
????????object.??A?GraphicsObject?may?only?be?drawn?into?one
????????window.?Raises?an?error?if?attempt?made?to?draw?an?object?that
????????is?already?visible."""
????????if?self.canvas?and?not?self.canvas.isClosed():?raise?GraphicsError(OBJ_ALREADY_DRAWN)
????????if?graphwin.isClosed():?raise?GraphicsError("Can't?draw?to?closed?window")
????????self.canvas?=?graphwin
????????self.id?=?self._draw(graphwin,?self.config)
????????if?graphwin.autoflush:
????????????_root.update()
????????????
????def?undraw(self):
????????"""Undraw?the?object?(i.e.?hide?it).?Returns?silently?if?the
????????object?is?not?currently?drawn."""
????????
????????if?not?self.canvas:?return
????????if?not?self.canvas.isClosed():
????????????self.canvas.delete(self.id)
????????????if?self.canvas.autoflush:
????????????????_root.update()
????????self.canvas?=?None
????????self.id?=?None
????def?move(self,?dx,?dy):
????????"""move?object?dx?units?in?x?direction?and?dy?units?in?y
????????direction"""
????????
????????self._move(dx,dy)
????????canvas?=?self.canvas
????????if?canvas?and?not?canvas.isClosed():
????????????trans?=?canvas.trans
????????????if?trans:
????????????????x?=?dx/?trans.xscale?
????????????????y?=?-dy?/?trans.yscale
????????????else:
????????????????x?=?dx
????????????????y?=?dy
????????????self.canvas.move(self.id,?x,?y)
????????????if?canvas.autoflush:
????????????????_root.update()
???????????
????def?_reconfig(self,?option,?setting):
????????#?Internal?method?for?changing?configuration?of?the?object
????????#?Raises?an?error?if?the?option?does?not?exist?in?the?config
????????#????dictionary?for?this?object
????????if?option?not?in?self.config:
????????????raise?GraphicsError(UNSUPPORTED_METHOD)
????????options?=?self.config
????????options[option]?=?setting
????????if?self.canvas?and?not?self.canvas.isClosed():
????????????self.canvas.itemconfig(self.id,?options)
????????????if?self.canvas.autoflush:
????????????????_root.update()
????def?_draw(self,?canvas,?options):
????????"""draws?appropriate?figure?on?canvas?with?options?provided
????????Returns?Tk?id?of?item?drawn"""
????????pass?#?must?override?in?subclass
????def?_move(self,?dx,?dy):
????????"""updates?internal?state?of?object?to?move?it?dx,dy?units"""
????????pass?#?must?override?in?subclass
?????????
class?Point(GraphicsObject):
????def?__init__(self,?x,?y):
????????GraphicsObject.__init__(self,?["outline",?"fill"])
????????self.setFill?=?self.setOutline
????????self.x?=?x
????????self.y?=?y
????????
????def?_draw(self,?canvas,?options):
????????x,y?=?canvas.toScreen(self.x,self.y)
????????return?canvas.create_rectangle(x,y,x+1,y+1,options)
????????
????def?_move(self,?dx,?dy):
????????self.x?=?self.x?+?dx
????????self.y?=?self.y?+?dy
????????
????def?clone(self):
????????other?=?Point(self.x,self.y)
????????other.config?=?self.config.copy()
????????return?other
????????????????
????def?getX(self):?return?self.x
????def?getY(self):?return?self.y
class?_BBox(GraphicsObject):
????#?Internal?base?class?for?objects?represented?by?bounding?box
????#?(opposite?corners)?Line?segment?is?a?degenerate?case.
????
????def?__init__(self,?p1,?p2,?options=["outline","width","fill"]):
????????GraphicsObject.__init__(self,?options)
????????self.p1?=?p1.clone()
????????self.p2?=?p2.clone()
????def?_move(self,?dx,?dy):
????????self.p1.x?=?self.p1.x?+?dx
????????self.p1.y?=?self.p1.y?+?dy
????????self.p2.x?=?self.p2.x?+?dx
????????self.p2.y?=?self.p2.y??+?dy
????????????????
????def?getP1(self):?return?self.p1.clone()
????def?getP2(self):?return?self.p2.clone()
????
????def?getCenter(self):
????????p1?=?self.p1
????????p2?=?self.p2
????????return?Point((p1.x+p2.x)/2.0,?(p1.y+p2.y)/2.0)
????
class?Rectangle(_BBox):
????
????def?__init__(self,?p1,?p2):
????????_BBox.__init__(self,?p1,?p2)
????
????def?_draw(self,?canvas,?options):
????????p1?=?self.p1
????????p2?=?self.p2
????????x1,y1?=?canvas.toScreen(p1.x,p1.y)
????????x2,y2?=?canvas.toScreen(p2.x,p2.y)
????????return?canvas.create_rectangle(x1,y1,x2,y2,options)
????????
????def?clone(self):
????????other?=?Rectangle(self.p1,?self.p2)
????????other.config?=?self.config.copy()
????????return?other
????????
class?Oval(_BBox):
????
????def?__init__(self,?p1,?p2):
????????_BBox.__init__(self,?p1,?p2)
????????
????def?clone(self):
????????other?=?Oval(self.p1,?self.p2)
????????other.config?=?self.config.copy()
????????return?other
???
????def?_draw(self,?canvas,?options):
????????p1?=?self.p1
????????p2?=?self.p2
????????x1,y1?=?canvas.toScreen(p1.x,p1.y)
????????x2,y2?=?canvas.toScreen(p2.x,p2.y)
????????return?canvas.create_oval(x1,y1,x2,y2,options)
????
class?Circle(Oval):
????
????def?__init__(self,?center,?radius):
????????p1?=?Point(center.x-radius,?center.y-radius)
????????p2?=?Point(center.x+radius,?center.y+radius)
????????Oval.__init__(self,?p1,?p2)
????????self.radius?=?radius
????????
????def?clone(self):
????????other?=?Circle(self.getCenter(),?self.radius)
????????other.config?=?self.config.copy()
????????return?other
????????
????def?getRadius(self):
????????return?self.radius
??????????????
class?Line(_BBox):
????
????def?__init__(self,?p1,?p2):
????????_BBox.__init__(self,?p1,?p2,?["arrow","fill","width"])
????????self.setFill(DEFAULT_CONFIG['outline'])
????????self.setOutline?=?self.setFill
???
????def?clone(self):
????????other?=?Line(self.p1,?self.p2)
????????other.config?=?self.config.copy()
????????return?other
??
????def?_draw(self,?canvas,?options):
????????p1?=?self.p1
????????p2?=?self.p2
????????x1,y1?=?canvas.toScreen(p1.x,p1.y)
????????x2,y2?=?canvas.toScreen(p2.x,p2.y)
????????return?canvas.create_line(x1,y1,x2,y2,options)
????????
????def?setArrow(self,?option):
????????if?not?option?in?["first","last","both","none"]:
????????????raise?GraphicsError(BAD_OPTION)
????????self._reconfig("arrow",?option)
????????
class?Polygon(GraphicsObject):
????
????def?__init__(self,?*points):
????????#?if?points?passed?as?a?list,?extract?it
????????if?len(points)?==?1?and?type(points[0])?==?type([]):
????????????points?=?points[0]
????????self.points?=?list(map(Point.clone,?points))
????????GraphicsObject.__init__(self,?["outline",?"width",?"fill"])
????????
????def?clone(self):
????????other?=?Polygon(*self.points)
????????other.config?=?self.config.copy()
????????return?other
????def?getPoints(self):
????????return?list(map(Point.clone,?self.points))
????def?_move(self,?dx,?dy):
????????for?p?in?self.points:
????????????p.move(dx,dy)
???
????def?_draw(self,?canvas,?options):
????????args?=?[canvas]
????????for?p?in?self.points:
????????????x,y?=?canvas.toScreen(p.x,p.y)
????????????args.append(x)
????????????args.append(y)
????????args.append(options)
????????return?GraphWin.create_polygon(*args)?
class?Text(GraphicsObject):
????
????def?__init__(self,?p,?text):
????????GraphicsObject.__init__(self,?["justify","fill","text","font"])
????????self.setText(text)
????????self.anchor?=?p.clone()
????????self.setFill(DEFAULT_CONFIG['outline'])
????????self.setOutline?=?self.setFill
????????
????def?_draw(self,?canvas,?options):
????????p?=?self.anchor
????????x,y?=?canvas.toScreen(p.x,p.y)
????????return?canvas.create_text(x,y,options)
????????
????def?_move(self,?dx,?dy):
????????self.anchor.move(dx,dy)
????????
????def?clone(self):
????????other?=?Text(self.anchor,?self.config['text'])
????????other.config?=?self.config.copy()
????????return?other
????def?setText(self,text):
????????self._reconfig("text",?text)
????????
????def?getText(self):
????????return?self.config["text"]
????????????
????def?getAnchor(self):
????????return?self.anchor.clone()
????def?setFace(self,?face):
????????if?face?in?['helvetica','arial','courier','times?roman']:
????????????f,s,b?=?self.config['font']
????????????self._reconfig("font",(face,s,b))
????????else:
????????????raise?GraphicsError(BAD_OPTION)
????def?setSize(self,?size):
????????if?5?<=?size?<=?36:
????????????f,s,b?=?self.config['font']
????????????self._reconfig("font",?(f,size,b))
????????else:
????????????raise?GraphicsError(BAD_OPTION)
????def?setStyle(self,?style):
????????if?style?in?['bold','normal','italic',?'bold?italic']:
????????????f,s,b?=?self.config['font']
????????????self._reconfig("font",?(f,s,style))
????????else:
????????????raise?GraphicsError(BAD_OPTION)
????def?setTextColor(self,?color):
????????self.setFill(color)
class?Entry(GraphicsObject):
????def?__init__(self,?p,?width):
????????GraphicsObject.__init__(self,?[])
????????self.anchor?=?p.clone()
????????#print?self.anchor
????????self.width?=?width
????????self.text?=?tk.StringVar(_root)
????????self.text.set("")
????????self.fill?=?"gray"
????????self.color?=?"black"
????????self.font?=?DEFAULT_CONFIG['font']
????????self.entry?=?None
????def?_draw(self,?canvas,?options):
????????p?=?self.anchor
????????x,y?=?canvas.toScreen(p.x,p.y)
????????frm?=?tk.Frame(canvas.master)
????????self.entry?=?tk.Entry(frm,
??????????????????????????????width=self.width,
??????????????????????????????textvariable=self.text,
??????????????????????????????bg?=?self.fill,
??????????????????????????????fg?=?self.color,
??????????????????????????????font=self.font)
????????self.entry.pack()
????????#self.setFill(self.fill)
????????return?canvas.create_window(x,y,window=frm)
????def?getText(self):
????????return?self.text.get()
????def?_move(self,?dx,?dy):
????????self.anchor.move(dx,dy)
????def?getAnchor(self):
????????return?self.anchor.clone()
????def?clone(self):
????????other?=?Entry(self.anchor,?self.width)
????????other.config?=?self.config.copy()
????????other.text?=?tk.StringVar()
????????other.text.set(self.text.get())
????????other.fill?=?self.fill
????????return?other
????def?setText(self,?t):
????????self.text.set(t)
????????????
????def?setFill(self,?color):
????????self.fill?=?color
????????if?self.entry:
????????????self.entry.config(bg=color)
????????????
????def?_setFontComponent(self,?which,?value):
????????font?=?list(self.font)
????????font[which]?=?value
????????self.font?=?tuple(font)
????????if?self.entry:
????????????self.entry.config(font=self.font)
????def?setFace(self,?face):
????????if?face?in?['helvetica','arial','courier','times?roman']:
????????????self._setFontComponent(0,?face)
????????else:
????????????raise?GraphicsError(BAD_OPTION)
????def?setSize(self,?size):
????????if?5?<=?size?<=?36:
????????????self._setFontComponent(1,size)
????????else:
????????????raise?GraphicsError(BAD_OPTION)
????def?setStyle(self,?style):
????????if?style?in?['bold','normal','italic',?'bold?italic']:
????????????self._setFontComponent(2,style)
????????else:
????????????raise?GraphicsError(BAD_OPTION)
????def?setTextColor(self,?color):
????????self.color=color
????????if?self.entry:
????????????self.entry.config(fg=color)
class?Image(GraphicsObject):
????idCount?=?0
????imageCache?=?{}?#?tk?photoimages?go?here?to?avoid?GC?while?drawn?
????
????def?__init__(self,?p,?*pixmap):
????????GraphicsObject.__init__(self,?[])
????????self.anchor?=?p.clone()
????????self.imageId?=?Image.idCount
????????Image.idCount?=?Image.idCount?+?1
????????if?len(pixmap)?==?1:?#?file?name?provided
????????????self.img?=?tk.PhotoImage(file=pixmap[0],?master=_root)
????????else:?#?width?and?height?provided
????????????width,?height?=?pixmap
????????????self.img?=?tk.PhotoImage(master=_root,?width=width,?height=height)
????????????????
????def?_draw(self,?canvas,?options):
????????p?=?self.anchor
????????x,y?=?canvas.toScreen(p.x,p.y)
????????self.imageCache[self.imageId]?=?self.img?#?save?a?reference??
????????return?canvas.create_image(x,y,image=self.img)
????
????def?_move(self,?dx,?dy):
????????self.anchor.move(dx,dy)
????????
????def?undraw(self):
????????del?self.imageCache[self.imageId]??#?allow?gc?of?tk?photoimage
????????GraphicsObject.undraw(self)
????def?getAnchor(self):
????????return?self.anchor.clone()
????????
????def?clone(self):
????????other?=?Image(Point(0,0),?0,?0)
????????other.img?=?self.img.copy()
????????other.anchor?=?self.anchor.clone()
????????other.config?=?self.config.copy()
????????return?other
????def?getWidth(self):
????????"""Returns?the?width?of?the?image?in?pixels"""
????????return?self.img.width()?
????def?getHeight(self):
????????"""Returns?the?height?of?the?image?in?pixels"""
????????return?self.img.height()
????def?getPixel(self,?x,?y):
????????"""Returns?a?list?[r,g,b]?with?the?RGB?color?values?for?pixel?(x,y)
????????r,g,b?are?in?range(256)
????????"""
????????
????????value?=?self.img.get(x,y)?
????????if?type(value)?==??type(0):
????????????return?[value,?value,?value]
????????else:
????????????return?list(map(int,?value.split()))?
????def?setPixel(self,?x,?y,?color):
????????"""Sets?pixel?(x,y)?to?the?given?color
????????
????????"""
????????self.img.put("{"?+?color?+"}",?(x,?y))
????????
????def?save(self,?filename):
????????"""Saves?the?pixmap?image?to?filename.
????????The?format?for?the?save?image?is?determined?from?the?filname?extension.
????????"""
????????
????????path,?name?=?os.path.split(filename)
????????ext?=?name.split(".")[-1]
????????self.img.write(?filename,?format=ext)
????????
def?color_rgb(r,g,b):
????"""r,g,b?are?intensities?of?red,?green,?and?blue?in?range(256)
????Returns?color?specifier?string?for?the?resulting?color"""
????return?"#%02x%02x%02x"?%?(r,g,b)
def?test():
????win?=?GraphWin()
????win.setCoords(0,0,10,10)
????t?=?Text(Point(5,5),?"Centered?Text")
????t.draw(win)
????p?=?Polygon(Point(1,1),?Point(5,3),?Point(2,7))
????p.draw(win)
????e?=?Entry(Point(5,6),?10)
????e.draw(win)
????win.getMouse()
????p.setFill("red")
????p.setOutline("blue")
????p.setWidth(2)
????s?=?""
????for?pt?in?p.getPoints():
????????s?=?s?+?"(%0.1f,%0.1f)?"?%?(pt.getX(),?pt.getY())
????t.setText(e.getText())
????e.setFill("green")
????e.setText("Spam!")
????e.move(2,0)
????win.getMouse()
????p.move(2,3)
????s?=?""
????for?pt?in?p.getPoints():
????????s?=?s?+?"(%0.1f,%0.1f)?"?%?(pt.getX(),?pt.getY())
????t.setText(s)
????win.getMouse()
????p.undraw()
????e.undraw()
????t.setStyle("bold")
????win.getMouse()
????t.setStyle("normal")
????win.getMouse()
????t.setStyle("italic")
????win.getMouse()
????t.setStyle("bold?italic")
????win.getMouse()
????t.setSize(14)
????win.getMouse()
????t.setFace("arial")
????t.setSize(20)
????win.getMouse()
????win.close()
if?__name__?==?"__main__":
????test()

?

About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub( http://blog.itpub.net/26736162 )、博客园( http://HdhCmsTestcnblogs测试数据/lhrbest )和个人weixin公众号( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://HdhCmsTestcnblogs测试数据/lhrbest

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://HdhCmsTesttoutiao测试数据/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 (满) 、618766405

● weixin群:可加我weixin,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 ( 646634621 ) ,注明添加缘由

● 于 2019-01-01 06:00 ~ 2019-01-31 24:00 在魔都完成

● 最新修改时间:2019-01-01 06:00 ~ 2019-01-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

● 小麦苗的微店 : https://weidian测试数据/s/793741433?wfr=c&ifr=shopdetail

● 小麦苗出版的数据库类丛书 : http://blog.itpub.net/26736162/viewspace-2142121/

● 小麦苗OCP、OCM、高可用网络班 : http://blog.itpub.net/26736162/viewspace-2148098/

● 小麦苗腾讯课堂主页 : https://lhr.ke.qq测试数据/

........................................................................................................................

使用 weixin客户端 扫描下面的二维码来关注小麦苗的weixin公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗weixin, 学习最实用的数据库技术。

........................................................................................................................

?

?

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2558369/,如需转载,请注明出处,否则将追究法律责任。

查看更多关于Python安装graphics库的详细内容...

  阅读:43次