Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import gtk, gobject
- class Crosslines(object):
- x_label = None
- y_label = None
- def __init__(self):
- self.redraw_timeout = False
- window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- window.set_title("Crosslines Example")
- window.connect("destroy", lambda w: gtk.main_quit())
- window.set_size_request(800,600)
- self.area = gtk.DrawingArea()
- self.x_label = gtk.Label('kasdhf')
- self.y_label = gtk.Label(-1)
- self.fixed = gtk.Fixed()
- self.fixed.set_events(gtk.gdk.POINTER_MOTION_MASK | \
- gtk.gdk.POINTER_MOTION_HINT_MASK)
- self.fixed.connect("motion_notify_event", self.motion_notify)
- self.fixed.set_has_window(True)
- self.fixed.put(self.x_label, 100, 300)
- self.fixed.put(self.y_label, 12, 40)
- self.fixed.put(self.area, 0, 0)
- window.add(self.fixed)
- window.show_all()
- def motion_notify(self, widget, event):
- x, y = event.get_coords()
- x = int(x)
- y = int(y)
- widget.move(self.x_label, x + 5, y -20)
- widget.move(self.y_label, x - 30, y -20)
- self.x_label.set_text(str(x));
- self.y_label.set_text(str(y));
- drawable = widget.window
- print type(drawable)
- gc = drawable.new_gc()
- gc.set_line_attributes(1, \
- gtk.gdk.LINE_SOLID, \
- gtk.gdk.CAP_BUTT, \
- gtk.gdk.JOIN_ROUND)
- rect = widget.get_allocation()
- drawable.draw_line(gc, x, 0, x, int(rect.height))
- drawable.draw_line(gc, 0, y, int(rect.width), y)
- if self.redraw_timeout:
- gobject.source_remove(self.redraw_timeout)
- self.redraw_timeout = gobject.timeout_add(50, self.redraw_lines, drawable, gc, x, y, rect)
- def redraw_lines(self, drawable, gc, x, y, rect):
- drawable.draw_line(gc, x, 0, x, int(rect.height))
- drawable.draw_line(gc, 0, y, int(rect.width), y)
- def main():
- gtk.main()
- return 0
- if __name__ == '__main__':
- Crosslines()
- main()
Add Comment
Please, Sign In to add comment