class MainWindow(GladeWindow): glade_file = os.path.join("gui", "pybotlearn.glade") def __init__(self): super(MainWindow, self).__init__() self.canvas = Canvas() self.canvas.connect("key-press-event", self.on_key) self.robot = self.canvas.robot execution.robot = self.robot self.canvas_sw.add(self.canvas) self.console = PythonConsole(execution.namespace) self.main_paned.pack2(self.console) self.show_all() self.canvas.get_hadjustment().connect("value-changed", self.on_scroll) self.canvas.get_vadjustment().connect("value-changed", self.on_scroll) def on_up(self, *args): self.console.eval("move_up()", True) def on_down(self, *args): self.console.eval("move_down()", True) def on_right(self, *args): self.console.eval("move_right()", True) def on_left(self, *args): self.console.eval("move_left()", True) def on_key(self, sender, event): if event.keyval == gtk.keysyms.Up: self.on_up() return True elif event.keyval == gtk.keysyms.Down: self.on_down() return True elif event.keyval == gtk.keysyms.Left: self.on_left() return True elif event.keyval == gtk.keysyms.Right: self.on_right() return True def on_say(self, button): text = self.say_textview.get_buffer() text = text.get_text(text.get_start_iter(), text.get_end_iter()) self.console.eval("say(%s)" % repr(text), True) def on_scroll(self, *args): scroll_x = self.canvas.get_hadjustment() scroll_y = self.canvas.get_vadjustment() robot_x = self.robot.get_pixel_x() robot_y = self.robot.get_pixel_y() self.hruler.set_range(scroll_x.value, scroll_x.value + scroll_x.page_size, robot_x, self.canvas.width) self.vruler.set_range(scroll_y.value, scroll_y.value + scroll_y.page_size, robot_y, self.canvas.height)
def _create_canvas(self, canvas_name): canvas = Canvas() canvas.set_size_request(self.DEFAULT_CANVAS_WIDTH, self.DEFAULT_CANVAS_WIDTH) canvas.connect("button-press-event", self._on_canvas_button_press, canvas_name) canvas.connect("drawing-stopped", self._on_canvas_drawing_stopped, canvas_name) canvas.connect("stroke-added", self._on_canvas_stroke_added, canvas_name) setattr(self, canvas_name, canvas) frame = gtk.Frame() frame.add(canvas) setattr(self, canvas_name + "_frame", frame)
class Mastermind(activity.Activity): def __init__(self, handle): activity.Activity.__init__(self, handle) self.canvas = Canvas() self.canvas.connect("data-changed", self._data_changed_cb) self.canvas.connect("win", self._win_cb) self.canvas.connect("lose", self._lose_cb) self.set_canvas(self.canvas) self.make_toolbar() self.read_file() self.show_all() def make_toolbar(self): def make_separator(expand=True): separator = Gtk.SeparatorToolItem() separator.props.draw = not expand separator.set_expand(expand) return separator toolbarbox = ToolbarBox() self.set_toolbar_box(toolbarbox) toolbar = toolbarbox.toolbar toolbar.insert(ActivityToolbarButton(self), -1) toolbar.insert(make_separator(False), -1) self.restart_button = ToolButton(icon_name="system-restart") self.restart_button.set_tooltip(_("Restart")) self.restart_button.props.accelerator = '<Ctrl>N' self.restart_button.connect("clicked", self._restart_cb) toolbar.insert(self.restart_button, -1) self.ok_button = ToolButton(icon_name="dialog-ok") self.ok_button.set_tooltip(_("Ok")) self.ok_button.set_sensitive(False) self.ok_button.props.accelerator = "Return" self.ok_button.connect("clicked", self._ok_cb) toolbar.insert(self.ok_button, -1) item = Gtk.ToolItem() toolbar.insert(item, -1) self.label = Gtk.Label() self.label.modify_font(Pango.FontDescription("Bold")) item.add(self.label) toolbar.insert(make_separator(True), -1) helpbutton = HelpButton() helpbutton.add_section(_("Instructions:")) helpbutton.add_paragraph(_("Place colors to the last played row."), image="instructions1.png") helpbutton.add_paragraph(_("When you complete a row, click on 'Ok button'."), image="instructions2.png") helpbutton.add_paragraph(_("Next to the row will appear black and white circles."), image="instructions3.png") helpbutton.add_paragraph(_("A black circle means you matched a peg and you placed it correctly.")) helpbutton.add_paragraph(_("A white circle means you matched a peg and you wrong placed it.")) helpbutton.add_paragraph(_("The goal is match all pegs in the correct place.")) toolbar.insert(helpbutton, -1) stop_button = StopButton(self) toolbar.insert(stop_button, -1) toolbar.show_all() def read_file(self): if "level" in list(self.metadata.keys()): data = { "level": int(self.metadata["level"]), "correct": [int(x) for x in eval(self.metadata["correct"])], "balls": {} } balls = eval(self.metadata["balls"]) for key in balls: x = int(key) data["balls"][x] = [] for value in balls[key]: y = int(value) data["balls"][x].append(y) current = [] for x in range(0, 4): current.append(data["balls"][x][data["level"]]) self.ok_button.set_sensitive(not BallType.NULL in current) self.canvas.set_game_data(data) def write_file(self, path): data = self.canvas.get_game_data() self.metadata["level"] = str(data["level"]).encode('utf-8') self.metadata["correct"] = str(data["correct"]).encode('utf-8') self.metadata["balls"] = str(data["balls"]).encode('utf-8') def _ok_cb(self, button): self.canvas.end_turn() def _restart_cb(self, button): self.canvas.reset() self.label.set_text("") def _data_changed_cb(self, canvas, data): self.ok_button.set_sensitive(not BallType.NULL in data) def _win_cb(self, canvas): self.ok_button.set_sensitive(False) self.label.set_text("You win") def _lose_cb(self, canvas): self.ok_button.set_sensitive(False) self.label.set_text("You lost")
class Mastermind(activity.Activity): def __init__(self, handle): activity.Activity.__init__(self, handle) self.canvas = Canvas(False) self.canvas.connect("data-changed", self._data_changed_cb) self.canvas.connect("win", self._win_cb) self.canvas.connect("lose", self._lose_cb) self.set_canvas(self.canvas) self.make_toolbar() self.read_file() self.easy_button.connect("toggled", self._difficulty_changed, Difficulty.EASY) self.medium_button.connect("toggled", self._difficulty_changed, Difficulty.MEDIUM) self.advanced_button.connect("toggled", self._difficulty_changed, Difficulty.ADVANCED) self.expert_button.connect("toggled", self._difficulty_changed, Difficulty.EXPERT) self.show_all() def make_toolbar(self): def make_separator(expand=True): separator = Gtk.SeparatorToolItem() separator.props.draw = not expand separator.set_expand(expand) return separator toolbarbox = ToolbarBox() self.set_toolbar_box(toolbarbox) toolbar = toolbarbox.toolbar toolbar.insert(ActivityToolbarButton(self), -1) toolbar.insert(make_separator(False), -1) self.restart_button = ToolButton(icon_name="system-restart") self.restart_button.set_tooltip(_("Restart")) self.restart_button.props.accelerator = '<Ctrl>N' self.restart_button.connect("clicked", self._restart_cb) toolbar.insert(self.restart_button, -1) self.ok_button = ToolButton(icon_name="dialog-ok") self.ok_button.set_tooltip(_("Ok")) self.ok_button.set_sensitive(False) self.ok_button.props.accelerator = "Return" self.ok_button.connect("clicked", self._ok_cb) toolbar.insert(self.ok_button, -1) toolbar.insert(make_separator(False), -1) button = ToolButton(icon_name="emblem-favorite") button.set_tooltip(_("Difficulty")) toolbar.insert(button, -1) palette = button.get_palette() palette_box = Gtk.VBox() palette.set_content(palette_box) self.easy_button = Gtk.RadioButton(_("Easy")) palette_box.pack_start(self.easy_button, False, False, 0) self.medium_button = Gtk.RadioButton(_("Medium"), group=self.easy_button) palette_box.pack_start(self.medium_button, False, False, 0) self.advanced_button = Gtk.RadioButton(_("Advanced"), group=self.easy_button) palette_box.pack_start(self.advanced_button, False, False, 0) self.expert_button = Gtk.RadioButton(_("Expert"), group=self.easy_button) palette_box.pack_start(self.expert_button, False, False, 0) palette_box.show_all() item = Gtk.ToolItem() toolbar.insert(item, -1) self.label = Gtk.Label() self.label.modify_font(Pango.FontDescription("Bold")) item.add(self.label) toolbar.insert(make_separator(True), -1) helpbutton = HelpButton() helpbutton.add_section(_("Instructions:")) helpbutton.add_paragraph(_("Place colors to the last played row."), image="instructions1.png") helpbutton.add_paragraph( _("When you complete a row, click on 'Ok button'."), image="instructions2.png") helpbutton.add_paragraph( _("Next to the row will appear black and white circles."), image="instructions3.png") helpbutton.add_paragraph( _("A black circle means you matched a peg and you placed it correctly." )) helpbutton.add_paragraph( _("A white circle means you matched a peg and you wrong placed it." )) helpbutton.add_paragraph( _("The goal is match all pegs in the correct place.")) toolbar.insert(helpbutton, -1) stop_button = StopButton(self) toolbar.insert(stop_button, -1) toolbar.show_all() def read_file(self): if "level" in self.metadata.keys(): data = { "level": int(self.metadata["level"]), "difficulty": int(self.metadata["difficulty"]), "correct": [int(x) for x in eval(self.metadata["correct"])], "balls": {} } balls = eval(self.metadata["balls"]) for key in balls: x = int(key) data["balls"][x] = [] for value in balls[key]: y = int(value) data["balls"][x].append(y) current = [] for x in range(0, get_columns_for_difficulty(data["difficulty"])): current.append(data["balls"][x][data["level"]]) self.ok_button.set_sensitive(not BallType.NULL in current) else: data = { "level": 0, "difficulty": Difficulty.MEDIUM, "correct": None, "balls": {} } columns = get_columns_for_difficulty(data["difficulty"]) for x in range(0, columns): data["balls"][x] = [BallType.NULL] * 10 self.ok_button.set_sensitive(False) if data["difficulty"] == Difficulty.EASY: self.easy_button.set_active(True) elif data["difficulty"] == Difficulty.MEDIUM: self.medium_button.set_active(True) elif data["difficulty"] == Difficulty.ADVANCED: self.advanced_button.set_active(True) elif data["difficulty"] == Difficulty.EXPERT: self.expert_button.set_active(True) self.canvas.set_game_data(data) def write_file(self, path): data = self.canvas.get_game_data() self.metadata["level"] = data["level"] self.metadata["difficulty"] = data["difficulty"] self.metadata["correct"] = data["correct"] self.metadata["balls"] = data["balls"] def _ok_cb(self, button): self.canvas.end_turn() def _restart_cb(self, button): self.canvas.reset() self.label.set_text("") def _data_changed_cb(self, canvas, data): self.ok_button.set_sensitive(not BallType.NULL in data) def _win_cb(self, canvas): self.ok_button.set_sensitive(False) self.label.set_text("You win") def _lose_cb(self, canvas): self.ok_button.set_sensitive(False) self.label.set_text("You lost") def _difficulty_changed(self, button, difficulty): if button.get_active(): self.canvas.set_difficulty(difficulty)
class Window: def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete-event", self.delete_event_cb) self.window.connect("destroy", self.destroy_cb) self.window.set_border_width(0) self.window.set_size_request(800, 600) self.window.show() self.canvas = Canvas() self.canvas.set_background((0, 0, 0)) self.canvas.set_foreground((0, 0, 0)) self.canvas.set_flags(gtk.HAS_FOCUS | gtk.CAN_FOCUS) self.canvas.grab_focus() self.layer1 = CanvasLayer() self.layer2 = CanvasLayer() self.canvas.append(self.layer1) self.canvas.append(self.layer2) self.canvas.show() self.window.add(self.canvas) for n in xrange(100): o = CanvasRect(self.layer1, 100, 100, 200, 200, filled=True) o.scale(random(), random(), random(), random()) o.move(randrange(1000), randrange(1000)) o.connect('button-press-event', self.button_press_event_cb) o.connect('motion-notify-event', self.motion_notify_event_cb) o.connect('button-release-event', self.button_release_event_cb) for n in xrange(100): g = CanvasGroup(self.layer2, fg=(0, 0, 1)) o = CanvasLine(g, 0, 0, 100, 100) print(dir(o)) o = CanvasRect(g, 0, 100, 100, 200, filled=True, fg=(0.5, 0.3, 0.4), bg=(1, 0.3, 0.4)) o = CanvasOval(g, 0, 200, 100, 300, fg=(0.5, 1, 0.3)) o = CanvasArc(g, 0, 300, 100, 400, start=0, extent=180) o = CanvasText(g, 0, 400, text='Hello') o = CanvasLine(g, 100, 0, 200, 100) o = CanvasRect(g, 100, 100, 200, 200, filled=True, outline=True) o = CanvasOval(g, 100, 200, 200, 300, filled=True) o = CanvasArc(g, 100, 300, 200, 400, start=90, extent=270, filled=True) o = CanvasText(g, 100, 400, text='World') g.scale(random(), random(), random(), random()) g.move(randrange(1000), randrange(1000)) g.connect('button-press-event', self.button_press_event_cb) g.connect('motion-notify-event', self.motion_notify_event_cb) g.connect('button-release-event', self.button_release_event_cb) # o = CanvasImage(self.layer1, 0, 0, filename='image2.jpeg') # o.connect('button-press-event', self.button_press_event_cb) # o.connect('motion-notify-event', self.motion_notify_event_cb) # o.connect('button-release-event', self.button_release_event_cb) # o = CanvasImage(self.layer1, 100, 100, filename='image1.png') # o.connect('button-press-event', self.button_press_event_cb) # o.connect('motion-notify-event', self.motion_notify_event_cb) # o.connect('button-release-event', self.button_release_event_cb) # o = CanvasFunc(self.layer1, target=self.canvas_func1, args=(), kw={}) self.canvas_button = None self.item = None self.item_prev_x = None self.item_prev_y = None self.item_button = None self.window.connect('key-press-event', self.window_key_press_event_cb) self.window.connect('key-release-event', self.window_key_release_event_cb) self.canvas.connect('button-press-event', self.canvas_button_press_event_cb) self.canvas.connect('motion-notify-event', self.canvas_motion_notify_event_cb) self.canvas.connect('button-release-event', self.canvas_button_release_event_cb) self.canvas.connect('scroll-event', self.canvas_scroll_event_cb) def delete_event_cb(self, widget, event, data=None): return False def destroy_cb(self, widget, data=None): gtk.main_quit() def main(self): gtk.main() def button_press_event_cb(self, widget, item, event): self.item = item self.item_prev_x = event.x self.item_prev_y = event.y self.item_button = event.button def motion_notify_event_cb(self, widget, item, event): if self.item_button == 1: dx = event.x - self.item_prev_x dy = event.y - self.item_prev_y self.item.move(dx, dy) self.item_prev_x = event.x self.item_prev_y = event.y def button_release_event_cb(self, widget, item, signal_id): self.item_button = None def canvas_button_press_event_cb(self, widget, event): self.canvas_button = event.button if self.canvas_button == 2: self.canvas_prev_x = event.x self.canvas_prev_y = event.y def canvas_motion_notify_event_cb(self, widget, event): if self.canvas_button == 2: dx = event.x - self.canvas_prev_x dy = event.y - self.canvas_prev_y self.canvas.move_all(dx, dy) self.canvas_prev_x = event.x self.canvas_prev_y = event.y def canvas_button_release_event_cb(self, widget, signal_id): self.canvas_button = None def canvas_scroll_event_cb(self, widget, event): if event.direction == gtk.gdk.SCROLL_UP: self.canvas.scale_all(event.x, event.y, 1.2, 1.2) elif event.direction == gtk.gdk.SCROLL_DOWN: self.canvas.scale_all(event.x, event.y, 1 / 1.2, 1 / 1.2) def window_key_press_event_cb(self, widget, event): print widget, event def window_key_release_event_cb(self, widget, event): print widget, event def canvas_func1(self, *args, **kw): self.canvas.draw_image(0, 0, xs=1.0, ys=1.0, filename='image2.jpeg') self.canvas.draw_line(0, 0, 100, 100) self.canvas.draw_rect(0, 100, 100, 200) self.canvas.draw_oval(0, 200, 100, 300) self.canvas.draw_arc(0, 300, 100, 400) self.canvas.draw_text(0, 400, "Hello World")
class Window: def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete-event", self.delete_event_cb) self.window.connect("destroy", self.destroy_cb) self.window.set_border_width(0) self.window.set_size_request(800, 600) self.window.show() self.canvas = Canvas() self.canvas.set_background((0,0,0)) self.canvas.set_foreground((0,0,0)) self.canvas.set_flags(gtk.HAS_FOCUS|gtk.CAN_FOCUS) self.canvas.grab_focus() self.layer1 = CanvasLayer() self.layer2 = CanvasLayer() self.canvas.append(self.layer1) self.canvas.append(self.layer2) self.canvas.show() self.window.add(self.canvas) for n in xrange(100): o = CanvasRect(self.layer1, 100, 100, 200, 200, filled=True) o.scale(random(), random(), random(), random()) o.move(randrange(1000), randrange(1000)) o.connect('button-press-event', self.button_press_event_cb) o.connect('motion-notify-event', self.motion_notify_event_cb) o.connect('button-release-event', self.button_release_event_cb) for n in xrange(100): g = CanvasGroup(self.layer2, fg=(0,0,1)) o = CanvasLine(g, 0, 0, 100, 100) print(dir(o)) o = CanvasRect(g, 0, 100, 100, 200, filled=True, fg=(0.5, 0.3,0.4),bg=(1, 0.3,0.4)) o = CanvasOval(g, 0, 200, 100, 300, fg=(0.5, 1,0.3)) o = CanvasArc(g, 0, 300, 100, 400, start=0, extent=180) o = CanvasText(g, 0, 400, text='Hello') o = CanvasLine(g, 100, 0, 200, 100) o = CanvasRect(g, 100, 100, 200, 200, filled=True, outline=True) o = CanvasOval(g, 100, 200, 200, 300, filled=True) o = CanvasArc(g, 100, 300, 200, 400, start=90, extent=270, filled=True) o = CanvasText(g, 100, 400, text='World') g.scale(random(), random(), random(), random()) g.move(randrange(1000), randrange(1000)) g.connect('button-press-event', self.button_press_event_cb) g.connect('motion-notify-event', self.motion_notify_event_cb) g.connect('button-release-event', self.button_release_event_cb) # o = CanvasImage(self.layer1, 0, 0, filename='image2.jpeg') # o.connect('button-press-event', self.button_press_event_cb) # o.connect('motion-notify-event', self.motion_notify_event_cb) # o.connect('button-release-event', self.button_release_event_cb) # o = CanvasImage(self.layer1, 100, 100, filename='image1.png') # o.connect('button-press-event', self.button_press_event_cb) # o.connect('motion-notify-event', self.motion_notify_event_cb) # o.connect('button-release-event', self.button_release_event_cb) # o = CanvasFunc(self.layer1, target=self.canvas_func1, args=(), kw={}) self.canvas_button = None self.item = None self.item_prev_x = None self.item_prev_y = None self.item_button = None self.window.connect('key-press-event', self.window_key_press_event_cb) self.window.connect('key-release-event', self.window_key_release_event_cb) self.canvas.connect('button-press-event', self.canvas_button_press_event_cb) self.canvas.connect('motion-notify-event', self.canvas_motion_notify_event_cb) self.canvas.connect('button-release-event', self.canvas_button_release_event_cb) self.canvas.connect('scroll-event', self.canvas_scroll_event_cb) def delete_event_cb(self, widget, event, data=None): return False def destroy_cb(self, widget, data=None): gtk.main_quit() def main(self): gtk.main() def button_press_event_cb(self, widget, item, event): self.item = item self.item_prev_x = event.x self.item_prev_y = event.y self.item_button = event.button def motion_notify_event_cb(self, widget, item, event): if self.item_button == 1: dx = event.x - self.item_prev_x dy = event.y - self.item_prev_y self.item.move(dx, dy) self.item_prev_x = event.x self.item_prev_y = event.y def button_release_event_cb(self, widget, item, signal_id): self.item_button = None def canvas_button_press_event_cb(self, widget, event): self.canvas_button = event.button if self.canvas_button == 2: self.canvas_prev_x = event.x self.canvas_prev_y = event.y def canvas_motion_notify_event_cb(self, widget, event): if self.canvas_button == 2: dx = event.x - self.canvas_prev_x dy = event.y - self.canvas_prev_y self.canvas.move_all(dx, dy) self.canvas_prev_x = event.x self.canvas_prev_y = event.y def canvas_button_release_event_cb(self, widget, signal_id): self.canvas_button = None def canvas_scroll_event_cb(self, widget, event): if event.direction == gtk.gdk.SCROLL_UP: self.canvas.scale_all(event.x, event.y, 1.2, 1.2) elif event.direction == gtk.gdk.SCROLL_DOWN: self.canvas.scale_all(event.x, event.y, 1/1.2, 1/1.2) def window_key_press_event_cb(self, widget, event): print widget, event def window_key_release_event_cb(self, widget, event): print widget, event def canvas_func1(self, *args, **kw): self.canvas.draw_image(0, 0, xs=1.0, ys=1.0, filename='image2.jpeg') self.canvas.draw_line(0, 0, 100, 100) self.canvas.draw_rect(0, 100, 100, 200) self.canvas.draw_oval(0, 200, 100, 300) self.canvas.draw_arc(0, 300, 100, 400) self.canvas.draw_text(0, 400, "Hello World")