| Server IP : 182.53.201.61 / Your IP : 216.73.217.175 Web Server : Apache/2.2.15 (Fedora) System : Linux km10.dyndns.org 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 User : apache ( 48) PHP Version : 5.3.3 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/doc/gnome-python2-canvas-2.28.0/ |
Upload File : |
#!/usr/bin/env python
# Author: Jesper Skov <jskov@cygnus.co.uk>
# A rewite of the C canvas example in the GNOME Developer's Information
import gtk
import gnomecanvas
from random import random
def mainquit(*args):
gtk.main_quit()
class CanvasExample:
def __init__(self):
self.width = 400
self.height = 400
self.all = []
self.colors = ("red",
"yellow",
"green",
"cyan",
"blue",
"magenta")
def change_item_color(self, item):
# Pick a random color from the list.
n = int(random() * len(self.colors)) - 1
item.set(fill_color = self.colors[n])
def item_event(self, widget, event=None):
if event.type == gtk.gdk.BUTTON_PRESS:
if event.button == 1:
# Remember starting position.
self.remember_x = event.x
self.remember_y = event.y
return True
elif event.button == 3:
# Destroy the item.
widget.destroy()
return True
elif event.type == gtk.gdk._2BUTTON_PRESS:
#Change the item's color.
self.change_item_color(widget)
return True
elif event.type == gtk.gdk.MOTION_NOTIFY:
if event.state & gtk.gdk.BUTTON1_MASK:
# Get the new position and move by the difference
new_x = event.x
new_y = event.y
widget.move(new_x - self.remember_x, new_y - self.remember_y)
self.remember_x = new_x
self.remember_y = new_y
return True
elif event.type == gtk.gdk.ENTER_NOTIFY:
# Make the outline wide.
widget.set(width_units=3)
return True
elif event.type == gtk.gdk.LEAVE_NOTIFY:
# Make the outline thin.
widget.set(width_units=1)
return True
return False
def add_object_clicked(self, widget, event=None):
x1 = random() * self.width
y1 = random() * self.height
x2 = random() * self.width
y2 = random() * self.height
if x1 > x2:
x2,x1 = x1,x2
if y1 > y2:
y2,y1 = y1,y2
if (x2 - x1) < 10:
x2 = x2 + 10
if (y2 - y1) < 10:
y2 = y2 + 10
if (random() > .5):
type = gnomecanvas.CanvasRect
else:
# Text names should work as well...
#type = gnomecanvas.CanvasEllipse
type = 'GnomeCanvasEllipse'
w = self.acanvas.root().add(type, x1=x1, y1=y1, x2=x2, y2=y2,
fill_color='white', outline_color='black',
width_units=1.0)
w.connect("event", self.item_event)
self.all.append(w)
def main(self):
# Open window to hold canvas.
win = gtk.Window()
win.connect('destroy', mainquit)
win.set_title('Canvas Example')
# Create VBox to hold canvas and buttons.
vbox = gtk.VBox()
win.add(vbox)
vbox.show()
# Some instructions for people using the example:
label = gtk.Label("Drag - move object.\n" +
"Double click - change colour\n" +
"Right click - delete object")
vbox.pack_start(label, expand=False)
label.show()
# Create canvas.
self.acanvas = gnomecanvas.Canvas(aa=True)
self.acanvas.set_size_request(self.width, self.height)
self.acanvas.set_scroll_region(0,0, self.width, self.height)
vbox.pack_start(self.acanvas)
self.acanvas.show()
# Create buttons.
hbox = gtk.HBox()
vbox.pack_start(hbox, expand=False)
hbox.show()
b = gtk.Button("Add an object")
b.connect("clicked", self.add_object_clicked)
hbox.pack_start(b)
b.show()
b = gtk.Button("Quit")
b.connect("clicked", mainquit)
hbox.pack_start(b)
b.show()
win.show()
if __name__ == '__main__':
c = CanvasExample()
c.main()
gtk.main()