def render_facts(self, date=None): date = date or self._date self.container.edit_box.hide() facts = self.storage.get_facts(date) self.fragments.sprites = [] self.connectors.sprites = [] self.entries.sprites = [] self.date_label.text = date.strftime("%d. %b %Y") for i, fact in enumerate(facts): if fact.activity not in fact_names: fact_names.append(fact.activity) color_index = fact_names.index(fact.activity) % len(colors) color = colors[color_index] fragment_height = int( delta_minutes(fact.start_time, fact.end_time) * self.pixels_in_minute) self.fragments.add_child( graphics.Rectangle(self.fragments.width, fragment_height, fill=color)) entry = Entry(self.entries.width, fact, entry_colors[color_index]) self.entries.add_child(entry) entry.connect("on-activate", self.on_entry_click) self.position_entries(date)
def __init__(self): window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.set_default_size(600, 500) window.connect("delete_event", lambda *args: gtk.main_quit()) self.liststore = gtk.ListStore(gobject.TYPE_PYOBJECT) self.liststore.append(['Open']) self.liststore.append(['New']) self.liststore.append(['Plint']) self.liststore.append(['Open']) self.liststore.append(['New']) self.liststore.append(['Plint']) self.treeview = gtk.TreeView(self.liststore) fact_cell = MagicCellRenderer() fact_cell.connect("on-enter-frame", self.on_enter_frame) fact_column = gtk.TreeViewColumn("", fact_cell, data=0) self.treeview.append_column(fact_column) self.rect = graphics.Rectangle(10, 10, stroke = "#000") fact_cell.add_child(self.rect) window.add(self.treeview) window.show_all()
def __init__(self, letter = "", width = None, interactive = False, border = False, **kwargs): graphics.Sprite.__init__(self, **kwargs) self.interactive = interactive self.width = width padding = self.width * 0.1 cell_size = self.width / 2 - padding inner_padding = self.width * 0.08 cell_radius = cell_size - inner_padding * 2 self.cells = [] for x in range(2): for y in range(3): cell = graphics.Circle(cell_radius, cell_radius, interactive = interactive, stroke = "#333", x = padding + x * cell_size + inner_padding, y = padding + y * cell_size + inner_padding) if interactive: cell.connect("on-mouse-over", self.on_mouse_over) cell.connect("on-mouse-out", self.on_mouse_out) self.add_child(cell) self.cells.append(cell) # keep a separate track so we don't mix up with other sprites if border: self.add_child(graphics.Rectangle(cell_size * 2 + padding * 2, cell_size * 3 + padding * 2, stroke="#000")) self.letter = letter
def create_bar(self, tarea, alto_bar, cur_x, j): # bar per area duracion_tarea_segundos = tarea.duracion.days * 24 * 60 * 60 duracion_tarea_segundos += tarea.duracion.seconds duracion_tarea_horas = duracion_tarea_segundos / 60 / 60 bar_ancho = self.hour_pixel * duracion_tarea_horas bar = graphics.Rectangle(bar_ancho, alto_bar, fill = color_tarea(tarea, j), stroke = "#FFEFEF00", #FIXME:El alpha pasa completamente de mí line_width = max(0, 4 - int(self.zoom_level / 31)), corner_radius = 10) # cur_x está siempre en las 00:00. Avanzo hasta la hora de # inicio real. bar.x = cur_x + (tarea.fecha.hour * self.hour_pixel) bar.y = 27 + self.lineas.index(tarea.area) * alto_bar bar.tarea = tarea if tarea.area in self.lineas: bar.area = self.lineas.index(tarea.area) else: bar.area = len(self.lineas) if DEBUG: print j, tarea, "(%d, %d) - (%d, %d)" % ( bar.x, bar.y, bar.x + bar.width, bar.y + bar.height) self.add_child(bar) self.bars[tarea] = bar
def TY_House(): """Paint house""" TY_House_Roof = gr.Circle(gr.Point(350, 150), 50) TY_House_Roof.setFill('Brown') TY_House_Roof.draw(window) TY_House_Wall = gr.Rectangle(gr.Point(300, 300), gr.Point(400, 150)) TY_House_Wall.setFill('Gray') TY_House_Wall.draw(window) TY_House_Step = gr.Rectangle(gr.Point(320, 300), gr.Point(380, 280)) TY_House_Step.setFill('Black') TY_House_Step.draw(window) TY_House_Door = gr.Rectangle(gr.Point(330, 280), gr.Point(370, 220)) TY_House_Door.setFill('Orange') TY_House_Door.draw(window) TY_House_Tube = gr.Rectangle(gr.Point(370, 130), gr.Point(390, 90)) TY_House_Tube.setFill('Black') TY_House_Tube.draw(window)
def create_portion_carga_linea(self, cur_x, numtarea_del_dia, pixel_width): """ Dibuja un rectángulo que representa la porción de barra vertical del número de empleados trabajando en una línea (área) simultáneamente el mismo día (no necesariamente en el mismo turno). Todas las porciones, que se dibujan justo después de la barra de la tarea de cada empleado, al apilarse forman la barra vertical total. """ # number of empleados simultáneos en líneas alto = 10 portion = graphics.Rectangle(pixel_width, alto, fill = "#ad0") portion.x = cur_x portion.y = self.height - 5 * (numtarea_del_dia + 1) self.add_child(portion)
def __init__(self): graphics.Scene.__init__(self) for i in range(14): self.add_child( graphics.Rectangle(40, 40, 3, y=420, x=i * 45 + 6, fill="#999", stroke="#444", interactive=True)) self.connect("on-mouse-over", self.on_mouse_over)
def __init__(self, letter, cell_width, **kwargs): graphics.Sprite.__init__(self, **kwargs) self.letter = letter mouse_rectangle = graphics.Rectangle(cell_width, cell_width * 1.4, 7, stroke="#000", interactive = True) self.add_child(mouse_rectangle) mouse_rectangle.connect("on-mouse-over", self.on_mouse_over) mouse_rectangle.connect("on-mouse-out", self.on_mouse_out) mouse_rectangle.connect("on-click", self.on_click) self.add_child(BrailCell(letter, width = cell_width)) self.add_child(graphics.Label(letter, size = 14, color="#000", x = 12, y = cell_width * 1.4 + 5))
def TY_House1(place): TY_House_Roof = gr.Circle(gr.Point(350 + place, 150), 50) TY_House_Roof.setFill('Brown') TY_House_Roof.draw(window) TY_House_Wall = gr.Rectangle(gr.Point(300 + place, 300), gr.Point(400 + place, 150)) TY_House_Wall.setFill('Gray') TY_House_Wall.draw(window) TY_House_Step = gr.Rectangle(gr.Point(320 + place, 300), gr.Point(380 + place, 280)) TY_House_Step.setFill('Black') TY_House_Step.draw(window) TY_House_Door = gr.Rectangle(gr.Point(330 + place, 280), gr.Point(370 + place, 220)) TY_House_Door.setFill('Orange') TY_House_Door.draw(window) TY_House_Tube = gr.Rectangle(gr.Point(370 + place, 130), gr.Point(390 + place, 90)) TY_House_Tube.setFill('Black') TY_House_Tube.draw(window)
def pintar_linea_vertical(self, cur_x, altura = None, label = None, label_center = False): if altura is None: altura = self.height vline = graphics.Rectangle(1, altura, fill= "#000") vline.x = cur_x vline.y = self.height - altura self.grid.append(vline) self.add_child(vline) if label: # Añado arriba del todo una etiqueta con el texto recibido. ldia = graphics.Label(label, 10, "#999", visible = True) self.labels["días"][label] = ldia self.add_child(ldia) if not label_center: ldia.x = cur_x + 2 ldia.y = 3 else: ldia.x = cur_x - (ldia.measure(label)[0] / 2) ldia.y = 13
def create_label_empleado(self, empleado, alto_label, alto_bar, offset_totales): """ Crea y coloca tanto el label del empleado como la línea horizontal. """ nombre = empleado.nombre lnombre = graphics.Label(nombre, alto_label, "#333", visible = True) self.labels["empleados"][empleado] = lnombre lnombre.x = 0 lnombre.y = 27 + self.empleados.index(empleado) * alto_bar self.add_child(lnombre) hline = graphics.Rectangle(self.width + offset_totales, 1, fill = "#000") hline.x = 0 hline.y = lnombre.y self.grid.append(hline) self.add_child(hline) ancho_label_nombre = lnombre.measure(nombre)[0] self.coords_y[lnombre.y] = empleado return ancho_label_nombre
def create_label_area(self, area, alto_label, alto_bar, offset_totales): """ Crea y coloca tanto el label del area como la línea horizontal. """ nombre = area.nombre or "" lnombre = graphics.Label(nombre, alto_label, "#333", visible = True) self.labels["lineas"][area] = lnombre lnombre.x = 0 lnombre.y = 27 + self.lineas.index(area) * alto_bar self.add_child(lnombre) hline = graphics.Rectangle(self.width + offset_totales, 1, fill = "#000") hline.x = 0 hline.y = lnombre.y self.grid.append(hline) self.add_child(hline) ancho_label_nombre = lnombre.measure(nombre)[0] self.coords_y[lnombre.y] = area return ancho_label_nombre
def __init__(self): graphics.Scene.__init__(self) self.connect("on-mouse-over", self.on_mouse_over) self.connect("on-mouse-out", self.on_mouse_out) self.connect("on-mouse-up", self.on_mouse_up) self.connect("on-mouse-move", self.on_mouse_move) self.connect("on-enter-frame", self.on_enter_frame) self.cache_as_bitmap = True self.paint_color = None self.add_child( graphics.Rectangle(600, 40, 4, "#666", opacity=0.8, z_order=999998)) self.fps_label = graphics.Label(size=20, color="#fff", z_order=999999, x=10, y=4) self.add_child(self.fps_label) self.bubbles = [] self.max_zorder = 1
def TY_Tree1(mesto): TY_Tree_Wood = gr.Rectangle(gr.Point(50 + mesto, 220), gr.Point(80 + mesto, 170)) TY_Tree_Wood.setFill('Brown') TY_Tree_Wood.draw(window) TY_Tree_Leafs = gr.Circle(gr.Point(65 + mesto, 145), 50) TY_Tree_Leafs.setFill('Green') TY_Tree_Leafs.draw(window) TY_Tree_Apple1 = gr.Circle(gr.Point(80 + mesto, 155), 10) TY_Tree_Apple1.setFill('Yellow') TY_Tree_Apple1.draw(window) TY_Tree_Apple2 = gr.Circle(gr.Point(60 + mesto, 115), 10) TY_Tree_Apple2.setFill('Yellow') TY_Tree_Apple2.draw(window) TY_Tree_Apple3 = gr.Circle(gr.Point(90 + mesto, 125), 10) TY_Tree_Apple3.setFill('Yellow') TY_Tree_Apple3.draw(window)
def TY_Tree(): """Paint Tree""" TY_Tree_Wood = gr.Rectangle(gr.Point(50, 220), gr.Point(80, 170)) TY_Tree_Wood.setFill('Brown') TY_Tree_Wood.draw(window) TY_Tree_Leafs = gr.Circle(gr.Point(65, 145), 50) TY_Tree_Leafs.setFill('Green') TY_Tree_Leafs.draw(window) TY_Tree_Apple1 = gr.Circle(gr.Point(80, 155), 10) TY_Tree_Apple1.setFill('Yellow') TY_Tree_Apple1.draw(window) TY_Tree_Apple2 = gr.Circle(gr.Point(60, 115), 10) TY_Tree_Apple2.setFill('Yellow') TY_Tree_Apple2.draw(window) TY_Tree_Apple3 = gr.Circle(gr.Point(90, 125), 10) TY_Tree_Apple3.setFill('Yellow') TY_Tree_Apple3.draw(window)
def create_bar(self, tarea, alto_bar, cur_x, j): # bar per empleado duracion_tarea_segundos = tarea.duracion.days * 24 * 60 * 60 duracion_tarea_segundos += tarea.duracion.seconds duracion_tarea_horas = duracion_tarea_segundos / 60 / 60 bar_ancho = self.hour_pixel * duracion_tarea_horas bar = graphics.Rectangle(bar_ancho, alto_bar, fill = color_por_area(tarea.area, self.lineas, tarea.fecha.hour), stroke = "#aaa") # cur_x está siempre en las 00:00. Avanzo hasta la hora de # inicio real. bar.x = cur_x + (tarea.fecha.hour * self.hour_pixel) bar.y = 27 + self.empleados.index(tarea.empleado) * alto_bar bar.tarea = tarea if tarea.empleado in self.empleados: bar.empleado = self.empleados.index(tarea.empleado) else: bar.empleado = len(self.empleados) if DEBUG: print j, tarea, "(%d, %d) - (%d, %d)" % ( bar.x, bar.y, bar.x + bar.width, bar.y + bar.height) self.add_child(bar) self.bars[tarea] = bar
def __init__(self, x, y, **kwargs): graphics.Sprite.__init__(self, x=x, y=y, opacity=0.5, **kwargs) self.graphics.fill_area(0, 0, 50, 200, "#f00") self.add_child(graphics.Rectangle(50, 200, fill="#0f0", y=50))
def __init__(self, x, y, color, follow=None): graphics.Sprite.__init__(self, x=x, y=y) self.follow = follow self.color = color self.add_child(graphics.Rectangle(20, 20, 3, color, x=-10, y=-10)) self.graphics.fill(color)
def __init__(self): now = dt.datetime.now() graphics.Scene.__init__(self) self.notebook = ui.Notebook(tab_position = "top-left", scroll_position="end", show_scroll = "auto_invisible", scroll_selects_tab = False) # boxes packed and nested horizontally and vertically, with a draggable corner self.box = ui.HBox(spacing = 3, x=10, y=10) self.button = ui.Button("My image changes position", image = graphics.Image("assets/hamster.png"), fill = False) self.button.connect("on-click", self.on_button_click) self.box.add_child(*[ui.VBox([self.button, ui.ToggleButton("I'm a toggle button! Have a tooltip too!", image = graphics.Image("assets/day.png"), fill = True, tooltip="Oh hey there, i'm a tooltip!"), ui.Label("I'm a label \nand we all can wrap", image = graphics.Image("assets/week.png"), spacing = 5, padding = 5, x_align = 0), ui.Entry("Feel free to edit me! I'm a rather long text that will scroll nicely perhaps. No guarantees though!", expand = False), ui.Entry("And me too perhaps", expand = False)], spacing = 5, padding = 10), Rectangle(20, expand = False), graphics.Label("rrrr", color="#666"), Rectangle(20, expand = False), ui.VBox([Rectangle(fill = False), Rectangle(), Rectangle()], spacing = 3) ]) box_w, box_h = self.box.get_min_size() self.corner = graphics.Rectangle(10, 10, fill="#666", x = self.box.x + box_w, y = self.box.y + box_h, draggable=True, interactive=True, z_order = 100) self.corner.connect("on-drag", self.on_corner_drag) # a table self.table = ui.Table(3, 3, snap_to_pixel = False, padding=10) self.table.attach(Rectangle(fill_color = "#f00", expand_vert = False), 0, 3, 0, 1) # top self.table.attach(Rectangle(fill_color = "#0f0", expand = False), 2, 3, 1, 2) # right self.table.attach(Rectangle(fill_color = "#f0f", expand_vert = False), 0, 3, 2, 3) # bottom self.table.attach(Rectangle(fill_color = "#0ff", expand = False), 0, 1, 1, 2) # left center = Rectangle() center.connect("on-mouse-over", self.on_table_mouse_over) center.connect("on-mouse-out", self.on_table_mouse_out) self.table.attach(center, 1, 2, 1, 2) # a scroll area with something to scroll in it self.scroll = ui.ScrollArea(border = 0) self.scroll.add_child(ui.Container(ui.Button("Scroll me if you can!", width = 1000, height = 300, fill=False), fill = False, padding=15)) # bunch of different input elements inputs = ui.Panes(padding=10) listitem = ui.ListItem(["Sugar", "Spice", "Everything Nice", "--", "Feel", "Free", "To", "Click", "On", "Me", {'markup': "<span color='red'>And</span>"}, "Use", "The", "Arrows!", "Ah", "And", "It", "Seems", "That", "There", "Are", "So", "Many", "Elements"]) def print_selection(listitem, item): print "selection", item def print_change(listitem, item): print "change", item listitem.connect("on-change", print_change) listitem.connect("on-select", print_selection) inputs.add_child(listitem) one = ui.ToggleButton("One", margin=[15, 10, 20, 30], id="one") group1 = ui.Group([one, ui.ToggleButton("Two", scale_x = 0.5, scale_y = 0.5, expand=False, id="two"), ui.ToggleButton("Three", id="three"), ui.ToggleButton("Four", id="four")], expand = False, allow_no_selection=True) label1 = ui.Label("Current value: none selected", x_align=0, expand = False) def on_toggle1(group, current_item): if current_item: label1.text = "Current value: %s" % current_item.label else: label1.text = "No item selected" group1.connect("on-change", on_toggle1) group2 = ui.Group([ui.RadioButton("One"), ui.RadioButton("Two"), ui.RadioButton("Three"), ui.RadioButton("Four")], horizontal = False) label2 = ui.Label("Current value: none selected", x_align = 0, expand=False) def on_toggle2(group, current_item): label2.text = "Current value: %s" % current_item.label group2.connect("on-change", on_toggle2) slider = ui.Slider(range(100), expand = False, snap_to_ticks = False, range=True, selection=(23, 80), grips_can_cross = False, snap_points = [5, 20, 50, 75], snap_on_release = True) slider_value = ui.Label(" ") def on_slider_change(slider, value): slider_value.text = str(value) slider.connect("on_change", on_slider_change) spinner = ui.Spinner(active = False, expand=False, width = 40) spinner_button = ui.Button("Toggle spin", expand=False) spinner_button.spinner = spinner def on_spinner_button_click(button, event): button.spinner.active = not button.spinner.active spinner_button.connect("on-click", on_spinner_button_click) combo = ui.ComboBox(["Sugar", "Spice", "Everything Nice", "And", "Other", "Nice", "Things"], open_below=True, expand = False) inputs.add_child(ui.VBox([combo, group1, label1, ui.HBox([group2, ui.VBox([ui.CheckButton("And a few of those", expand = False), ui.CheckButton("Check boxes", expand = False), ui.CheckButton("Which don't work for groups", expand = False)]) ]), label2, slider, slider_value, ui.HBox([spinner, spinner_button], expand=False, spacing = 10), ui.HBox([ui.ScrollArea(ui.Label(sample_text * 3, overflow = pango.WrapMode.WORD, fill=True, padding=[2, 5]), height=45, scroll_horizontal=False), ui.SpinButton(expand = False, fill=False)], expand = False), ], expand = False, spacing = 10)) combo.rows = ["some", "things", "are", "made", "of", "bananas", "and", "icecream"] menu = ui.Menu([ui.MenuItem(label="One", menu=ui.Menu([ui.MenuItem(label="One one", menu=ui.Menu([ui.MenuItem(label="One one one"), ui.MenuItem(label="One one two"), ui.MenuSeparator(), ui.MenuItem(label="One one three")])), ui.MenuSeparator(), ui.MenuItem(label="One two", mnemonic="Ctrl+1"), ui.MenuItem(label="One three", mnemonic="Alt+1")])), ui.MenuItem(label="Two", menu=ui.Menu([ui.MenuItem(label="Two one", mnemonic="Ctrl+Alt+2"), ui.MenuItem(label="Two two", mnemonic="Ctrl+2"), ui.MenuSeparator(), ui.MenuItem(label="Two three", mnemonic="Alt+2")])), ui.MenuItem(label="Three", menu=ui.Menu([ui.MenuItem(label="Three one", mnemonic="Ctrl+Alt+3"), ui.MenuItem(label="Three two", mnemonic="Ctrl+3"), ui.MenuSeparator(), ui.MenuItem(label="Three three", mnemonic="Alt+3")])), ui.MenuItem(label="Four", menu=ui.Menu([ui.MenuItem(label="Four one", mnemonic="Ctrl+Alt+4"), ui.MenuItem(label="Four two", mnemonic="Ctrl+4"), ui.MenuSeparator(), ui.MenuItem(label="Four three", mnemonic="Alt+4")])), ], horizontal=True) self.menu_selection_label = ui.Label("Pick a menu item!", expand = False, x_align = 1) def on_menuitem_selected(menu, item, event): self.menu_selection_label.text = item.label menu.connect("selected", on_menuitem_selected) # adding notebook and attaching pages self.notebook.add_page(ui.NotebookTab(image=graphics.Image("assets/day.png"), label="boxes", padding=[1,5]), ui.Fixed([self.box, self.corner], x = 10, y = 10)) self.notebook.add_page(ui.NotebookTab("Table", tooltip="Oh hey, i'm a table!"), self.table) self.notebook.add_page("Scroll Area", self.scroll) self.notebook.add_page("Input Elements", inputs) self.notebook.add_page("Menu", ui.VBox([menu, self.menu_selection_label, ui.HBox(ui.Menu([ui.MenuItem(label="", image = graphics.Image("assets/day.png"), submenu_offset_x = 0, submenu_offset_y = 0, menu=ui.Menu([ui.MenuItem(label="", image = graphics.Image("assets/month.png")), ui.MenuItem(label="", image = graphics.Image("assets/hamster.png")), ui.MenuSeparator(), ui.MenuItem(label="", image = graphics.Image("assets/hamster.png")), ui.MenuItem(label="", image = graphics.Image("assets/month.png"))], horizontal=True)), ui.MenuItem(label="", image = graphics.Image("assets/hamster.png"),submenu_offset_x = 0, submenu_offset_y = 0, menu=ui.Menu([ui.MenuItem(label="", image = graphics.Image("assets/month.png")), ui.MenuItem(label="", image = graphics.Image("assets/month.png")), ui.MenuItem(label="", image = graphics.Image("assets/week.png")), ui.MenuSeparator(), ui.MenuItem(label="", image = graphics.Image("assets/month.png"))], horizontal=True)), ui.MenuItem(label="", image = graphics.Image("assets/month.png"), submenu_offset_x = 0, submenu_offset_y = 0, menu=ui.Menu([ui.MenuItem(label="", image = graphics.Image("assets/week.png")), ui.MenuItem(label="", image = graphics.Image("assets/week.png")), ui.MenuSeparator(), ui.MenuItem(label="", image = graphics.Image("assets/week.png")), ui.MenuItem(label="", image = graphics.Image("assets/month.png"))], horizontal=True)), ], horizontal=False, spacing=50, hide_on_leave = True, open_on_hover = 0.01), expand=False), ui.Box()], padding=10)) self.slice_image = ui.Image('assets/slice9.png', fill=True, slice_left = 35, slice_right = 230, slice_top = 35, slice_bottom = 220) data = [] image = graphics.Image("assets/day.png") for i in range(10): data.append(["aasdf asdfasdf asdfasdf", "basdfasdf asdfasdf asdfasdf", image, "rrr"]) data.append(["1", "2", None, "rrr"]) data.append(["4", "5", None, "rrr"]) tree = ui.ListItem(data, [ui.LabelRenderer(editable=True), ui.LabelRenderer(editable=True), ui.ImageRenderer(expand=False, width=90)], headers=["Text", "More text", "An icon!"], fixed_headers = False, scroll_border = 0 ) self.notebook.add_page("Tree View", tree) #tree.data[0][1] = "I was actually modified afterwards!" self.notebook.add_page("Accordion", ui.Accordion([ ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm am the first in the row", [ui.Label(accordion_text, overflow = pango.WrapMode.WORD, padding=5)]), ui.AccordionPage("I'm different!", [ ui.VBox([ ui.Button("I'm a button", fill=False, expand=False), ui.Button("I'm another one", fill=False, expand=False), ui.Group([ ui.ToggleButton("We"), ui.ToggleButton("Are"), ui.ToggleButton("Brothers"), ui.ToggleButton("Radio Brothers"), ], expand=False) ], expand=False) ]), ], padding_top = 1, padding_left = 1)) from pie_menu import Menu pie_menu = Menu(0, 0) pie_menu.y_align = 0.45 self.magic_box = ui.VBox([ui.HBox([ui.Button("Hello", expand=False), ui.Button("Thar", expand=False), ui.Label("Drag the white area around", x_align=1)], expand=False, padding=5), pie_menu], x=50, y=50, spacing=50, draggable=True) self.magic_box.width = 500 self.magic_box.height = 400 def just_fill(): box = self.magic_box box.graphics.fill_area(0, 0, box.width, box.height, "#fefefe") self.magic_box.do_render = just_fill self.notebook.add_page("Ordinary Sprite", ui.Fixed(self.magic_box)) for i in range(5): self.notebook.add_page("Tab %d" % i) self.notebook.current_page = 3 # a little button to change tab orientation self.tab_orient_switch = ui.Button("Change tab attachment", expand=False, tooltip="change") self.tab_orient_switch.connect("on-click", self.on_tab_orient_click) self.page_disablist = ui.Button("Enable/Disable current tab", expand=False, tooltip="disable") self.page_disablist.connect("on-click", self.on_page_disablist_click) self.dialog_button = ui.Button("Show a dialog", expand=False, tooltip="show") self.dialog_button.connect("on-click", self.on_dialog_button_click) top_menu = ui.Menu([ui.MenuItem(label="One", menu=ui.Menu([ui.MenuItem(label="One one oh one oh one etc etc", menu=ui.Menu([ui.MenuItem(label="One one one"), ui.MenuItem(label="One one two"), ui.MenuItem(label="One one three")])), ui.MenuItem(label="One two"), ui.MenuItem(label="One three")])), ui.MenuItem(label="Two", menu=ui.Menu([ui.MenuItem(label="Two one"), ui.MenuItem(label="Two two"), ui.MenuItem(label="Two three")])), ui.MenuItem(label="Three", menu=ui.Menu([ui.MenuItem(label="Three one"), ui.MenuItem(label="Three two"), ui.MenuItem(label="Three three")])), ui.MenuItem(label="Four", menu=ui.Menu([ui.MenuItem(label="Four one"), ui.MenuItem(label="Four two"), ui.MenuItem(label="Four three")])), ui.MenuItem(label="Five") ], horizontal=True, disable_toggling=True) # not sure how elegant but let's override the flow for now for demo purposes! dummy_flow = ui.Flow() def flow_resize(): dummy_flow.alloc_w, dummy_flow.alloc_h = top_menu.alloc_w, top_menu.alloc_h dummy_flow.sprites = top_menu.sprites dummy_flow.resize_children() top_menu.height = top_menu.sprites[-1].y + top_menu.sprites[-1].height def flow_height_for_width_size(): dummy_flow.alloc_w, dummy_flow.alloc_h = top_menu.alloc_w, top_menu.alloc_h dummy_flow.sprites = top_menu.sprites w, h = dummy_flow.get_height_for_width_size() return w, h def flow_min_size(): dummy_flow.sprites = top_menu.sprites w, h = dummy_flow.get_min_size() return w+ top_menu.horizontal_padding, h + top_menu.vertical_padding # flow if b0rken ATM for i in range(20): top_menu.add_child(ui.MenuItem(label="flow %d" % i)) top_menu.resize_children = flow_resize #top_menu.get_height_for_width_size = flow_height_for_width_size top_menu.get_min_size = flow_min_size self.add_child(ui.VBox([top_menu, ui.VBox([self.notebook, ui.HBox([self.tab_orient_switch, self.page_disablist, self.dialog_button], expand = False, fill=False, x_align=1), ], padding=20, spacing=10)], spacing = 10)) self.connect("on-click", self.on_click) self.notebook.after_tabs.add_child(ui.Button("Yohoho")) print dt.datetime.now() - now
"""MIPT Python Course. Contest4""" from lib import graphics as gr window = gr.GraphWin("TY_Picture", 500, 350) print('Задание 1') # Exercise 1 TY_Field1 = gr.Rectangle(gr.Point(0, 350), gr.Point(500, 200)) TY_Field1.draw(window) TY_Field1.setFill('Green') TY_Flower1 = gr.Circle(gr.Point(80, 300), 15) TY_Flower1.setFill('Red') TY_Flower1.draw(window) TY_Flower2 = gr.Circle(gr.Point(160, 280), 15) TY_Flower2.setFill('Red') TY_Flower2.draw(window) TY_Flower3 = gr.Circle(gr.Point(240, 320), 15) TY_Flower3.setFill('Red') TY_Flower3.draw(window) TY_Flower3 = gr.Circle(gr.Point(210, 240), 15) TY_Flower3.setFill('Red') TY_Flower3.draw(window) TY_House_Roof = gr.Circle(gr.Point(350, 150), 50) TY_House_Roof.setFill('Brown') TY_House_Roof.draw(window) TY_House_Wall = gr.Rectangle(gr.Point(300, 300), gr.Point(400, 150)) TY_House_Wall.setFill('Gray') TY_House_Wall.draw(window)
def clear_window(): """Функция, очищающая поле""" rectangle = gr.Rectangle(gr.Point(0, 0), gr.Point(SIZE_X, SIZE_Y)) rectangle.setFill('green') rectangle.draw(window)
def on_enter_frame(self, scene, context): if not self.data and not self.show_empty: return g = graphics.Graphics(context) g.set_line_style(width=1) days = (self.end_date - self.start_date).days full_days = [] self.clrscr() alto_bar = 15 alto_label = 8 anchos_areas = [] anchos_totales = [] for area in self.lineas: # Totales. Necesito duplicar el bucle porque el ancho de los # totales me hará falta después para las líneas horizontales. ancho_label_total = self.create_label_total(area, alto_label, alto_bar) anchos_totales.append(ancho_label_total) offset_totales = max(anchos_totales) + 5 # Por la derecha. for area in self.lineas: ancho_label_nombre = self.create_label_area(area, alto_label, alto_bar, offset_totales) anchos_areas.append(ancho_label_nombre) if self.lineas: # Una línea más debajo del último area hline = graphics.Rectangle(self.width + offset_totales, 1, fill = "#000") hline.x = 0 hline.y = 27 + len(self.lineas) * alto_bar self.grid.append(hline) self.add_child(hline) offset_labels = max(anchos_areas) + 5 # píxeles. Pero reales, no # los píxeles de la escena (day_pixel & co.), que no van 1:1. lanno = graphics.Label(`self.start_date.year`, 16, "#999") offset_labels = max(offset_labels, lanno.measure(`self.start_date.year`)[0]) lanno.y = 0 lanno.x = offset_labels - lanno.measure(`self.start_date.year`)[0] self.add_child(lanno) # Cuento el número de barras que tendré que dibujar cada día: for day in range(days): current_date = self.start_date + dt.timedelta(days = day) #if not self.day_counts[current_date]: # continue # "Comprime" la gráfica ignorando días vacíos. full_days.append(self.day_counts[current_date]) # Y ahora calculo las dimensiones en función de los días a representar. # El +1 es porque al haber tantos datos representados, la división # sale a veces (las más) un poco al alza, provocando que las barras # vayan más allá del borde del canvas. self.day_pixel = (float(self.width - offset_labels - offset_totales) / (len(full_days) + 1)) self.hour_pixel = self.day_pixel / 24 cur_x = offset_labels pixel_width = max(round(self.day_pixel), 1) dia = self.start_date for lista_tareas_day in full_days: #cur_x += round(self.hour_pixel) #print "lista_tareas_day", lista_tareas_day self.create_vlines(full_days, cur_x, dia) # "Pinto" de la más larga a la más corta para distinguir cómo se # superponen. zbuffer = calculate_zbuffer(lista_tareas_day) for numtarea_del_dia, tarea in enumerate(lista_tareas_day): self.create_bar(tarea, alto_bar, cur_x, zbuffer[tarea]) self.create_portion_carga_linea(cur_x, numtarea_del_dia, pixel_width) dia += dt.timedelta(days = 1) cur_x += round(pixel_width) # Una vez que está todo "pintado", es hora de ajustar bien el ancho y # calcular la x donde se renderizarán los totales: for area in self.labels['totales']: ltotal = self.labels['totales'][area] ltotal.x = self.width - offset_totales if DEBUG: print "-" * 80