/
usr
/
lib64
/
python2.7
/
Demo
/
tkinter
/
guido
/
/usr/lib64/python2.7/Demo/tkinter/guido
mkdir
upload
Name
Size
Mode
Actions
AttrDialog.py
14340
0644
edit
dl
rm
AttrDialog.pyc
18765
0644
edit
dl
rm
AttrDialog.pyo
18765
0644
edit
dl
rm
brownian.py
1091
0644
edit
dl
rm
brownian.pyc
1625
0644
edit
dl
rm
brownian.pyo
1625
0644
edit
dl
rm
brownian2.py
1379
0644
edit
dl
rm
brownian2.pyc
1785
0644
edit
dl
rm
brownian2.pyo
1785
0644
edit
dl
rm
canvasevents.py
6605
0755
edit
dl
rm
canvasevents.pyc
10716
0644
edit
dl
rm
canvasevents.pyo
10716
0644
edit
dl
rm
dialog.py
3201
0755
edit
dl
rm
dialog.pyc
3183
0644
edit
dl
rm
dialog.pyo
3183
0644
edit
dl
rm
electrons.py
2322
0755
edit
dl
rm
electrons.pyc
2386
0644
edit
dl
rm
electrons.pyo
2386
0644
edit
dl
rm
hanoi.py
4649
0644
edit
dl
rm
hanoi.pyc
3913
0644
edit
dl
rm
hanoi.pyo
3913
0644
edit
dl
rm
hello.py
331
0644
edit
dl
rm
hello.pyc
701
0644
edit
dl
rm
hello.pyo
701
0644
edit
dl
rm
imagedraw.py
509
0644
edit
dl
rm
imagedraw.pyc
1155
0644
edit
dl
rm
imagedraw.pyo
1155
0644
edit
dl
rm
imageview.py
205
0644
edit
dl
rm
imageview.pyc
570
0644
edit
dl
rm
imageview.pyo
570
0644
edit
dl
rm
kill.py
3884
0755
edit
dl
rm
kill.pyc
4928
0644
edit
dl
rm
kill.pyo
4928
0644
edit
dl
rm
listtree.py
991
0644
edit
dl
rm
listtree.pyc
1533
0644
edit
dl
rm
listtree.pyo
1533
0644
edit
dl
rm
ManPage.py
6856
0644
edit
dl
rm
ManPage.pyc
6423
0644
edit
dl
rm
ManPage.pyo
6423
0644
edit
dl
rm
mbox.py
7477
0755
edit
dl
rm
mbox.pyc
8369
0644
edit
dl
rm
mbox.pyo
8369
0644
edit
dl
rm
MimeViewer.py
4497
0755
edit
dl
rm
MimeViewer.pyc
4949
0644
edit
dl
rm
MimeViewer.pyo
4949
0644
edit
dl
rm
newmenubardemo.py
1232
0755
edit
dl
rm
newmenubardemo.pyc
1624
0644
edit
dl
rm
newmenubardemo.pyo
1624
0644
edit
dl
rm
optionmenu.py
441
0644
edit
dl
rm
optionmenu.pyc
594
0644
edit
dl
rm
optionmenu.pyo
594
0644
edit
dl
rm
paint.py
1898
0644
edit
dl
rm
paint.pyc
2243
0644
edit
dl
rm
paint.pyo
2243
0644
edit
dl
rm
rmt.py
4491
0755
edit
dl
rm
rmt.pyc
5045
0644
edit
dl
rm
rmt.pyo
5045
0644
edit
dl
rm
ShellWindow.py
4172
0644
edit
dl
rm
ShellWindow.pyc
5601
0644
edit
dl
rm
ShellWindow.pyo
5601
0644
edit
dl
rm
solitaire.py
17789
0755
edit
dl
rm
solitaire.pyc
20897
0644
edit
dl
rm
solitaire.pyo
20897
0644
edit
dl
rm
sortvisu.py
19346
0755
edit
dl
rm
sortvisu.pyc
23739
0644
edit
dl
rm
sortvisu.pyo
23739
0644
edit
dl
rm
ss1.py
26183
0644
edit
dl
rm
ss1.pyc
32427
0644
edit
dl
rm
ss1.pyo
31818
0644
edit
dl
rm
svkill.py
4864
0755
edit
dl
rm
svkill.pyc
5941
0644
edit
dl
rm
svkill.pyo
5941
0644
edit
dl
rm
switch.py
1559
0644
edit
dl
rm
switch.pyc
2921
0644
edit
dl
rm
switch.pyo
2921
0644
edit
dl
rm
tkman.py
9004
0755
edit
dl
rm
tkman.pyc
9089
0644
edit
dl
rm
tkman.pyo
9089
0644
edit
dl
rm
wish.py
623
0644
edit
dl
rm
wish.pyc
737
0644
edit
dl
rm
wish.pyo
737
0644
edit
dl
rm
Edit:
/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.py
(6605B)
#! /usr/bin/python2.7 from Tkinter import * from Canvas import Oval, Group, CanvasText # Fix a bug in Canvas.Group as distributed in Python 1.4. The # distributed bind() method is broken. This is what should be used: class Group(Group): def bind(self, sequence=None, command=None): return self.canvas.tag_bind(self.id, sequence, command) class Object: """Base class for composite graphical objects. Objects belong to a canvas, and can be moved around on the canvas. They also belong to at most one ``pile'' of objects, and can be transferred between piles (or removed from their pile). Objects have a canonical ``x, y'' position which is moved when the object is moved. Where the object is relative to this position depends on the object; for simple objects, it may be their center. Objects have mouse sensitivity. They can be clicked, dragged and double-clicked. The behavior may actually be determined by the pile they are in. All instance attributes are public since the derived class may need them. """ def __init__(self, canvas, x=0, y=0, fill='red', text='object'): self.canvas = canvas self.x = x self.y = y self.pile = None self.group = Group(self.canvas) self.createitems(fill, text) def __str__(self): return str(self.group) def createitems(self, fill, text): self.__oval = Oval(self.canvas, self.x-20, self.y-10, self.x+20, self.y+10, fill=fill, width=3) self.group.addtag_withtag(self.__oval) self.__text = CanvasText(self.canvas, self.x, self.y, text=text) self.group.addtag_withtag(self.__text) def moveby(self, dx, dy): if dx == dy == 0: return self.group.move(dx, dy) self.x = self.x + dx self.y = self.y + dy def moveto(self, x, y): self.moveby(x - self.x, y - self.y) def transfer(self, pile): if self.pile: self.pile.delete(self) self.pile = None self.pile = pile if self.pile: self.pile.add(self) def tkraise(self): self.group.tkraise() class Bottom(Object): """An object to serve as the bottom of a pile.""" def createitems(self, *args): self.__oval = Oval(self.canvas, self.x-20, self.y-10, self.x+20, self.y+10, fill='gray', outline='') self.group.addtag_withtag(self.__oval) class Pile: """A group of graphical objects.""" def __init__(self, canvas, x, y, tag=None): self.canvas = canvas self.x = x self.y = y self.objects = [] self.bottom = Bottom(self.canvas, self.x, self.y) self.group = Group(self.canvas, tag=tag) self.group.addtag_withtag(self.bottom.group) self.bindhandlers() def bindhandlers(self): self.group.bind('<1>', self.clickhandler) self.group.bind('<Double-1>', self.doubleclickhandler) def add(self, object): self.objects.append(object) self.group.addtag_withtag(object.group) self.position(object) def delete(self, object): object.group.dtag(self.group) self.objects.remove(object) def position(self, object): object.tkraise() i = self.objects.index(object) object.moveto(self.x + i*4, self.y + i*8) def clickhandler(self, event): pass def doubleclickhandler(self, event): pass class MovingPile(Pile): def bindhandlers(self): Pile.bindhandlers(self) self.group.bind('<B1-Motion>', self.motionhandler) self.group.bind('<ButtonRelease-1>', self.releasehandler) movethis = None def clickhandler(self, event): tags = self.canvas.gettags('current') for i in range(len(self.objects)): o = self.objects[i] if o.group.tag in tags: break else: self.movethis = None return self.movethis = self.objects[i:] for o in self.movethis: o.tkraise() self.lastx = event.x self.lasty = event.y doubleclickhandler = clickhandler def motionhandler(self, event): if not self.movethis: return dx = event.x - self.lastx dy = event.y - self.lasty self.lastx = event.x self.lasty = event.y for o in self.movethis: o.moveby(dx, dy) def releasehandler(self, event): objects = self.movethis if not objects: return self.movethis = None self.finishmove(objects) def finishmove(self, objects): for o in objects: self.position(o) class Pile1(MovingPile): x = 50 y = 50 tag = 'p1' def __init__(self, demo): self.demo = demo MovingPile.__init__(self, self.demo.canvas, self.x, self.y, self.tag) def doubleclickhandler(self, event): try: o = self.objects[-1] except IndexError: return o.transfer(self.other()) MovingPile.doubleclickhandler(self, event) def other(self): return self.demo.p2 def finishmove(self, objects): o = objects[0] p = self.other() x, y = o.x, o.y if (x-p.x)**2 + (y-p.y)**2 < (x-self.x)**2 + (y-self.y)**2: for o in objects: o.transfer(p) else: MovingPile.finishmove(self, objects) class Pile2(Pile1): x = 150 y = 50 tag = 'p2' def other(self): return self.demo.p1 class Demo: def __init__(self, master): self.master = master self.canvas = Canvas(master, width=200, height=200, background='yellow', relief=SUNKEN, borderwidth=2) self.canvas.pack(expand=1, fill=BOTH) self.p1 = Pile1(self) self.p2 = Pile2(self) o1 = Object(self.canvas, fill='red', text='o1') o2 = Object(self.canvas, fill='green', text='o2') o3 = Object(self.canvas, fill='light blue', text='o3') o1.transfer(self.p1) o2.transfer(self.p1) o3.transfer(self.p2) # Main function, run when invoked as a stand-alone Python program. def main(): root = Tk() demo = Demo(root) root.protocol('WM_DELETE_WINDOW', root.quit) root.mainloop() if __name__ == '__main__': main()
Save
cmd:
run