Пример #1
0
class ihm(Tkinter.Tk):
    def entrer():
        print 'click'
        self.value.set("bonjour")
        self.entrer.pack()

    def __init__(self, parent):
        Tkinter.Tk.__init__(self, parent)
        self.parent = parent

        self.initialize()

    def initialize(self):
        #layout manager
        self.grid()

        #champ de texte (entrer)
        self.lframe = LabelFrame(self, text="Nom du noeud", padx=50, pady=20)
        self.lframe.pack(fill="both", expand="yes")
        self.lframe.grid(column=0, row=0, sticky='EW')

        self.value = StringVar()
        #self.value.set("Noeud")
        self.entrer = Tkinter.Entry(self.lframe,
                                    fg='grey',
                                    textvariable=self.value).pack()

        self.button = Tkinter.Button(self, text="Ok", command=self.entrer)
        self.button.grid(column=1, row=0)

        #self.label = Tkinter.Label(self,anchor="center",text = 'Nom du noeud :',fg="black",bg="white")
        #self.label.grid(column=0,row=0,columnspan=2,sticky='EW')
        #redimensionnement auto
        self.grid_columnconfigure(0, weight=1)
        self.geometry("800x600+300+0")
Пример #2
0
    def _init_components(self):
        self._panes = PanedWindow(self, orient='horizontal', sashrelief="raised")
        self._panes.pack(expand=True, fill='both')

        self._left_pane = Frame(self._panes, padx=10, pady=5)
        self._right_pane = PanedWindow(self._panes)
        self._panes.add(self._left_pane, sticky='n')
        self._panes.add(self._right_pane)

        self._group_select = GroupSelect(self._left_pane)
        self._group_select.pack(expand=True, fill='x')

        # spacer
        Frame(self._left_pane, height=10).pack()

        graph_controls = LabelFrame(self._left_pane, text="Graph options", padx=10, pady=5)
        graph_controls.columnconfigure(1, weight=1)
        graph_controls.pack(expand=True, fill='x')

        self._show_graph_checkbutton = CheckBox(graph_controls, text='Show graph')
        self._show_graph_checkbutton.select()
        self._show_graph_checkbutton.grid(row=0, columnspan=2, sticky='w')

        Label(graph_controls, text='Algorithm').grid(row=1, sticky='w')
        self._graph_type = OptionList(graph_controls, values=MainWindow.GRAPH_TYPES.keys())
        self._graph_type.config(width=15)
        self._graph_type.grid(row=1, column=1, sticky='we')

        # spacer
        Frame(self._left_pane, height=10).pack()

        self._go_button = Button(self._left_pane, text='Go', command=self._go)
        self._go_button.pack()
Пример #3
0
class Message(Show_style):
    def __init__(self, master=None):
        Show_style.__init__(self, master)
        self.add_status()
        self.create_widget()
        self.pack_all()

    def create_widget(self):
        self.create_main_frame()

    def create_main_frame(self):
        self.main_labelframe = LabelFrame(self, text='消息中心')
        self.main_list_item = (('业务编号',10),('客户编号',8),('客户名称',20),('发放日',10),('到期日',10),('贷款金额',5),('产品名称',10),('期限', 5),('利率',8), ('申请状态', 14))
        self.main_list = MultiListbox(self.main_labelframe, self.main_list_item, height=22)
        self.main_list.grid(padx=10, pady=10, row=0, column=0)

        self.check_button = Button(self.main_labelframe, text='察看')
        def check_func():
            apply_information = self.get_mutilistbox_choose()
            if not apply_information:
                MessageBox('当前申请', '请先选中一个申请消息')
                return
            self.apply_information_toplevel = ApplyInformationToplevel(self, apply_information)
        self.check_button['command'] = check_func
        self.check_button.grid(pady=10, row=1, column=0)
    
    def get_mutilistbox_choose(self):
        now = self.main_list.curselection()
        if not now:
            return None
        else:
            print 'now', self.main_list.get(now)
            number = self.main_list.get(now)[0]
            #return const.apply_information_list[int(now[0])]
            for apply_information in const.apply_information_list:
                if apply_information[15] == number:
                    return apply_information

    def refresh_mutilistbox(self):
        self.main_list.delete(0, self.main_list.size())
        self.add_item()

    def add_item(self):
        apply_list = show_apply_list()
        for p in apply_list:
            now_state = int(p[-1])
            if now_state >= 5:
                p[-1] = '审核通过'
            elif now_state > int(const.user_type):
                p[-1] = '等待上级审核'
            elif now_state == int(const.user_type):
                p[-1] = '等待当前用户审核'
            elif now_state < int(const.user_type):
                continue
            self.main_list.insert(Tkinter.END, p)

    def pack_all(self):
        self.main_labelframe.pack()
Пример #4
0
def callHelpdWindow():
    textvar='K-TAIL State Transition Software\nVersion:1.0\nAuthor:Lenz L Nerit\University:Victoria University of Wellington\n'
    helpWind=Toplevel()
    helpWind.resizable(width=FALSE, height=FALSE)
    frame=ttk.Frame(helpWind)
    frm=LabelFrame(frame,text='test')
    frm.pack()
    lbl=Label(frm,text="sampleStatus",width=10,bg='blue')
    lbl.pack(fill=BOTH)
    helpWind.mainloop()
Пример #5
0
def wybierajZestawZnakow(zestawieZnakow):
    gui = Tk()
    gui.resizable(0, 0)
    gui.title("")
    fra1 = LabelFrame(gui, text="Stary zestaw znaków")
    fra1.pack(padx=2, pady=2)
    var1 = StringVar()
    var1.set(zestawieZnakow[0])
    opt1 = OptionMenu(fra1, var1, *zestawieZnakow)
    opt1.pack(fill="x")
    but1 = Button(fra1, text="Otwieraj plik", command=lambda: gui.destroy())
    but1.pack(fill="x", padx=2, pady=2)
    gui.mainloop()
    return var1.get()
Пример #6
0
def specific_frame(gui, link):
    # TODO: Handle resizing if there is too much information displayed.
    res = wrap.get_class_grades(link)
    main_frame = LabelFrame(gui, text=res["class_name"] + " - " + res["current_average"])
    for sec in res["sections"]:
        frame_name = sec["name"]
        if sec["average"]:
            frame_name += " - " + sec["average"]
        temp_frame = LabelFrame(main_frame, text=frame_name, padx=20, pady=5)
        for i, h in enumerate(sec["grades"]["headers"]):
            Label(temp_frame, text=h).grid(row=1, column=i)
        for i, r in enumerate(sec["grades"]["rows"]):
            for j, c in enumerate(r):
                Label(temp_frame, text=c).grid(row=i+2, column=j)
        temp_frame.pack(padx=20, pady=5)
    main_frame.pack(padx=10, pady=(0, 10))
Пример #7
0
def overview_frame(gui):
    def click_link(link):
        gui.destroy()
        specific_gui(link)
    res = wrap.get_student_grades_overview()
    frame = LabelFrame(gui, text=res["student_name"], padx=20, pady=10)
    for i, t in enumerate(res["grades"]["headers"]):
        Label(frame, text=str(t)).grid(row=0, column=i)
    for i, r in enumerate(res["grades"]["rows"]):
        for j, c in enumerate(r):
            if isinstance(c, Link):
                Button(frame, command=lambda l=c: click_link(l), text=str(c))\
                    .grid(row=i+1, column=j)
            elif c:
                Label(frame, text=str(c)).grid(row=i+1, column=j)
    frame.pack(padx=10, pady=10)
    gui.title(res["student_name"])
Пример #8
0
	def displayAxis(self, frame, axis, gmin, gmax, gtot):
		labels = {'X': 'Width:', 'Y': 'Depth:', 'Z': 'Height:'}
		
		f = LabelFrame(frame, text="%s Axis:" % axis)
		f.pack(fill=X, pady=10, padx=10)
		
		l = Label(f, text="Minimum:", width=12, justify=RIGHT)
		l.grid(row=1, column=1, sticky=E)
		l = Label(f, text="%8.3f" % gmin, justify=LEFT)
		l.grid(row=1, column=2)
		
		l = Label(f, text="Maximum:", width=12, justify=RIGHT)
		l.grid(row=2, column=1, sticky=E)
		l = Label(f, text="%8.3f" % gmax, justify=LEFT)
		l.grid(row=2, column=2)
		
		l = Label(f, text=labels[axis], width=12, justify=RIGHT)
		l.grid(row=3, column=1, sticky=E)
		l = Label(f, text="%8.3f" % gtot, justify=LEFT)
		l.grid(row=3, column=2)
Пример #9
0
    def _init_components(self):
        self._panes = PanedWindow(self, orient='horizontal',
            sashrelief='raised')
        self._panes.pack(expand=True, fill='both')

        self._left_pane = Frame(self._panes, padx=2, pady=2)
        self._right_pane = Frame(self._panes)
        self._panes.add(self._left_pane, width=500)
        self._panes.add(self._right_pane)

        # group name
        group_name_pane = LabelFrame(self._left_pane, text="Group")
        group_name_pane.pack(fill='x')

        self._group_name = GroupNameLabel(group_name_pane, self._group)
        self._group_name.pack(expand=True, fill='both')

        # group order
        group_order_pane = LabelFrame(self._left_pane, text="Order")
        group_order_pane.pack(fill='x')

        self._group_order = IntegerContainer(group_order_pane,
            integer=self._group.order())
        self._group_order.pack(expand=True, fill='both')

        # apex
        self._apex_pane = LabelFrame(self._left_pane, text="Apex")
        self._apex_pane.pack(expand=True, fill='both')

        self._apex_container = ApexListContainer(self._apex_pane,
            apex=self._group.apex())
        self._apex_container.pack(expand=True, fill='both')

        self._show_graph_button = Button(self._right_pane, text='Show graph',
            command=self._show_graph_canvas)
        self._graph_canvas = None
        if self._show_graph:
            self._show_graph_canvas()
        else:
            self._show_graph_button.pack()
Пример #10
0
    def _init_components(self):
        self._panes = PanedWindow(self, orient='horizontal', sashrelief='raised')
        self._panes.pack(expand=True, fill='both')

        self._left_pane = Frame(self._panes, padx=2, pady=2)
        self._right_pane = Frame(self._panes)
        self._panes.add(self._left_pane, width=250)
        self._panes.add(self._right_pane)

        # group name
        group_name_pane = LabelFrame(self._left_pane, text="Group", padx=10, pady=5)
        group_name_pane.pack(fill='x')

        self._group_name = GroupNameLabel(group_name_pane, self._group)
        self._group_name.pack(expand=True, fill='both')

        # group order
        group_order_pane = LabelFrame(self._left_pane, text="Order", padx=10, pady=5)
        group_order_pane.pack(fill='x')

        self._group_order = IntegerContainer(group_order_pane, integer=self._group.order())
        self._group_order.pack(expand=True, fill='both')

        # apex
        self._apex_pane = LabelFrame(self._left_pane, text="Apex", padx=10, pady=5)
        self._apex_pane.pack(expand=True, fill='both')

        self._apex_container = ApexListContainer(self._apex_pane, apex=self._group.apex())
        self._apex_container.pack(expand=True, fill='both')

        # graph controls
        cocliques_frame = LabelFrame(self._left_pane, text="Cocliques", padx=10, pady=5)
        cocliques_frame.pack(fill='x')

        self._cocliques_button = Button(cocliques_frame, text="Calculate", command=self._show_cocliques)
        self._cocliques_button.pack(anchor='nw')

        self._cocliques_container = ListContainer(cocliques_frame)
        self._cocliques_list = Listbox(self._cocliques_container)
        self._cocliques_container.set_listbox(self._cocliques_list)

        # Button(graph_controls, text='Group equivalent vertices').pack(anchor='nw')

        # this is a button that show up instead of graph canvas if we uncheck 'Show graph' checkbox.
        self._show_graph_button = Button(self._right_pane, text='Show graph',
                                         command=self._show_graph_canvas)
        self._graph_canvas = None
        if self._show_graph:
            self._show_graph_canvas()
        else:
            self._show_graph_button.pack()
Пример #11
0
def resetRaport():
    textField.delete(0.0, END)


# rysowanie okna

mainWindow = Tk()
mainWindow.title("Delivery status")
mainWindow.resizable(width=False, height=False)
mainWindow.lift()

inputFrame = Frame(mainWindow, padx=10, pady=10)
inputFrame.pack(fill="both")
resultFrame = LabelFrame(mainWindow, text=" Raport ", font=("Verdana", 15, "bold"), padx=10, pady=10)
resultFrame.pack(pady=5)

label0 = Label(inputFrame, text="Wprowadz wartosci:", font=("Vileda", 15, "bold"))
label0.grid(row=1, column=0, sticky="W")

label1 = Label(inputFrame, text="Ilosc wszystkich TC w spotchecku: ").grid(row=3, column=0, sticky="W")
totalTCinput = Entry(inputFrame)
totalTCinput.grid(row=3, column=1)

label2 = Label(inputFrame, text="Ilosc TC w spotchecku ze statusem Failed:").grid(row=4, column=0, sticky="W")
failedTCinput = Entry(inputFrame)
failedTCinput.grid(row=4, column=1)

label3 = Label(inputFrame, text="Ilosc wszystkich PR/CR w deliverce:").grid(row=5, column=0, sticky="W")
totalPRCRinput = Entry(inputFrame)
totalPRCRinput.grid(row=5, column=1)
Пример #12
0
        print(indent * level + output)
        _print_widget_tree_from(child, print_names, print_classes, level + 1,
                                indent)


if __name__ == "__main__":
    try:
        from Tkinter import Tk, Frame, Label, Button, LabelFrame
    except ImportError:
        from tkinter import Tk, Frame, Label, Button, LabelFrame

    root = Tk()

    container1 = LabelFrame(root, class_="Container1")
    container1.pack()

    left = Frame(container1, name="left")
    left.pack()

    Label(left, name="label0").pack()

    center = Frame(container1, name="center")
    center.pack()

    area1 = Frame(center, class_="Area1")
    area1.pack()

    area2 = Frame(center, class_="Area2")
    area2.pack()
Пример #13
0
    def __init__(self, master=None, main=None):
        Frame.__init__(self, master)

        self.parent = master
        self.main = main

        self.parent.geometry("336x424")
        self.parent.title(os.getenv("NAME") + " - Board Config")
        self.master.configure(padx=10, pady=10)

        self.intvar = IntVar()

        #Arch
        self.arch_var = IntVar()
        lf_arch = LabelFrame(self.parent, text="Architecture")
        lf_arch.pack(fill=X, expand=True, side=TOP)

        frame_arch = Frame(lf_arch)
        frame_arch.pack(fill=X, expand=True, side=TOP)

        frame_left1 = Frame(frame_arch)
        frame_left1.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right1 = Frame(frame_arch)
        frame_right1.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_arch_8 = Radiobutton(frame_left1,
                                              text="8-bit ",
                                              anchor="w",
                                              width=10,
                                              value=8,
                                              variable=self.arch_var,
                                              command=self.update_mode)
        self.radioButton_arch_8.pack(fill=X, side=TOP)

        self.radioButton_arch_32 = Radiobutton(frame_right1,
                                               text="32-bit",
                                               anchor="w",
                                               width=10,
                                               value=32,
                                               variable=self.arch_var,
                                               command=self.update_mode)
        self.radioButton_arch_32.pack(fill=X, side=TOP)

        #Mode
        self.mode_var = StringVar()
        lf_mode = LabelFrame(self.parent, text="Programming mode")
        lf_mode.pack(fill=X, expand=True, side=TOP)

        frame_mode = Frame(lf_mode)
        frame_mode.pack(fill=X, expand=True, side=TOP)

        frame_left2 = Frame(frame_mode)
        frame_left2.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right2 = Frame(frame_mode)
        frame_right2.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_mode_icsp = Radiobutton(frame_left2,
                                                 text="ICSP",
                                                 anchor="w",
                                                 width=10,
                                                 value="icsp",
                                                 variable=self.mode_var,
                                                 command=self.update_mode)
        self.radioButton_mode_icsp.pack(side=TOP, fill=X)

        self.radioButton_mode_bootloader = Radiobutton(
            frame_right2,
            text="Bootloader",
            anchor="w",
            width=10,
            value="bootloader",
            variable=self.mode_var,
            command=self.update_mode)
        self.radioButton_mode_bootloader.pack(side=TOP, fill=X)

        #Bootloader
        self.boot_var = StringVar()
        self.lf_boot = LabelFrame(self.parent, text="Bootloader")
        self.lf_boot.pack(fill=X, expand=True, side=TOP)

        frame_boot = Frame(self.lf_boot)
        frame_boot.pack(fill=X, expand=True, side=TOP)

        frame_left3 = Frame(frame_boot)
        frame_left3.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right3 = Frame(frame_boot)
        frame_right3.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_bootloader_v1_v2 = Radiobutton(frame_left3,
                                                        text="v1.x or v2.x",
                                                        anchor="w",
                                                        width=10,
                                                        value="v1_v2",
                                                        variable=self.boot_var)
        self.radioButton_bootloader_v1_v2.pack(fill=X, side=TOP, expand=True)
        self.radioButton_bootloader_v4 = Radiobutton(frame_right3,
                                                     text="v4.x",
                                                     anchor="w",
                                                     width=10,
                                                     value="v4",
                                                     variable=self.boot_var)
        self.radioButton_bootloader_v4.pack(fill=X, side=TOP, expand=True)

        #Devices 8bit
        self.dev8_var = StringVar()
        self.lf_dev8 = LabelFrame(self.parent, text="Devices")
        self.lf_dev8.pack(fill=X, expand=True, side=TOP)

        self.frame_8b = Frame(self.lf_dev8)
        self.frame_8b.pack(fill=X, expand=True, side=TOP)

        #Devices 32bit
        self.dev32_var = StringVar()
        self.lf_dev32 = LabelFrame(self.parent, text="Devices")
        self.lf_dev32.pack(fill=X, expand=True, side=TOP)

        self.frame_32b = Frame(self.lf_dev32)
        self.frame_32b.pack(fill=X, expand=True, side=TOP)

        frame_buttons = Frame(self.parent)
        Button(frame_buttons, text="Accept",
               command=self.accept_config).pack(fill=X,
                                                expand=True,
                                                side=RIGHT)
        Button(frame_buttons, text="Cancel",
               command=self.quit).pack(fill=X, expand=True, side=LEFT)
        frame_buttons.pack(fill=X, expand=True, side=BOTTOM)

        frame_advance = Frame(self.parent)
        self.advanceoptions = Button(frame_advance,
                                     text="Advance options",
                                     command=self.advance)
        self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM)
        frame_advance.pack(fill=X, expand=True, side=BOTTOM)

        frame_warning = Frame(self.parent)
        self.label_warning = Label(frame_warning,
                                   fg="red",
                                   text="warning!",
                                   anchor="w")
        self.label_warning.pack(fill=X, expand=True, side=BOTTOM)
        frame_warning.pack(fill=X, expand=True, side=BOTTOM)

        self.build_devices_arch()
        self.load_config()
        self.init_groups()
Пример #14
0
hello.pack()

frmControl = Frame()
frmControl.pack(side=TOP)

frmgap = Frame(height=50)
frmgap.pack(side=TOP)
connState = Tkinter.Label(frmgap,bg='red', width=2)
connState.pack()

frmOther = Frame()
frmOther.pack(side=TOP)

#define car controller panel
frmCar = LabelFrame(frmControl, text='Car controller')
frmCar.pack(side=LEFT)


carButtonUp = Tkinter.Button(frmCar,text="up",bg='blue')
carButtonUp.bind('<ButtonRelease-1>', popUpMessageBox, "")
carButtonUp.pack(side=TOP)

carButtonLeft = Tkinter.Button(frmCar,text="left",bg='green')
carButtonLeft.bind('<ButtonRelease-1>', popUpMessageBox, "")
carButtonLeft.pack(side=LEFT)

carButtonRight = Tkinter.Button(frmCar,text="right",bg='blue')
carButtonRight.bind('<ButtonRelease-1>', popUpMessageBox, "")
carButtonRight.pack(side=RIGHT)

carButtonDown = Tkinter.Button(frmCar,text="down",bg='blue')
Пример #15
0
class Facade(Frame):
    """This is a Frame that contains group info, group order, apex and prime
    graph.
    """

    def __init__(self, parent, group, show_graph=True, **kw):
        Frame.__init__(self, parent, **kw)
        self._group = group
        #        self._show_apex = True
        self._show_graph = show_graph
        self._init_variables()
        self._init_menu()
        self._init_components()


    @property
    def group(self):
        return self._group

    @property
    def apex_list_container(self):
        return self._apex_container

    @property
    def graph_canvas(self):
        return self._graph_canvas

    def _show_graph_canvas(self):
        self._show_graph_button.forget()
        # TODO: add different layouts and other options
        graph = self._group.prime_graph()
        self._graph_canvas = GraphCanvas(self._right_pane, SpringLayout(graph))
        self._graph_canvas.pack(expand=True, fill='both')

        self._graph_canvas.vertex_label_mode = self.getvar(
            name=self.winfo_name() + ".vertexlabelposition")

        self._iterations_plugin = IterationsPlugin()
        self._iterations_plugin.apply(self._graph_canvas)

        self.update_layout()

    def _init_components(self):
        self._panes = PanedWindow(self, orient='horizontal',
            sashrelief='raised')
        self._panes.pack(expand=True, fill='both')

        self._left_pane = Frame(self._panes, padx=2, pady=2)
        self._right_pane = Frame(self._panes)
        self._panes.add(self._left_pane, width=500)
        self._panes.add(self._right_pane)

        # group name
        group_name_pane = LabelFrame(self._left_pane, text="Group")
        group_name_pane.pack(fill='x')

        self._group_name = GroupNameLabel(group_name_pane, self._group)
        self._group_name.pack(expand=True, fill='both')

        # group order
        group_order_pane = LabelFrame(self._left_pane, text="Order")
        group_order_pane.pack(fill='x')

        self._group_order = IntegerContainer(group_order_pane,
            integer=self._group.order())
        self._group_order.pack(expand=True, fill='both')

        # apex
        self._apex_pane = LabelFrame(self._left_pane, text="Apex")
        self._apex_pane.pack(expand=True, fill='both')

        self._apex_container = ApexListContainer(self._apex_pane,
            apex=self._group.apex())
        self._apex_container.pack(expand=True, fill='both')

        self._show_graph_button = Button(self._right_pane, text='Show graph',
            command=self._show_graph_canvas)
        self._graph_canvas = None
        if self._show_graph:
            self._show_graph_canvas()
        else:
            self._show_graph_button.pack()

    def _init_variables(self):
        def set_default_var(self, name):
            """Sets widget-specific var with same value as root.
            """
            default_var = self.getvar(name)
            local_var_name = self.winfo_name() + "." + name
            self.setvar(local_var_name, default_var)
            return local_var_name

        local_name = set_default_var(self, "vertexlabelposition")
        tools.trace_variable(self, local_name, "w",
            self._change_vertex_label_position)

    def _change_vertex_label_position(self, name, *arg):
        # override default value
        self.setvar("vertexlabelposition", self.getvar(name))
        if self._graph_canvas is not None:
            self._graph_canvas.vertex_label_mode = self.getvar(name)


    def _init_menu(self):
        toplevel = self.winfo_toplevel()
        if toplevel['menu']:
            self._menu = self.nametowidget(name=toplevel['menu'])
        else:
            self._menu = Menu(toplevel)
            toplevel['menu'] = self._menu

        graph_options = Menu(self._menu, tearoff=0)
        self._menu.add_cascade(label="Graph", menu=graph_options)
        self._menu_index = self._menu.index("end")

        vertex_label_position = Menu(graph_options, tearoff=0)
        graph_options.add_cascade(label="Label position",
            menu=vertex_label_position)

        vertexlabelposition_var = self.winfo_name() + ".vertexlabelposition"
        vertex_label_position.add_radiobutton(label="Auto", value="auto",
            variable=vertexlabelposition_var)
        vertex_label_position.add_radiobutton(label="Center", value="center",
            variable=vertexlabelposition_var)

        graph_options.add_command(label="Save graph...",
            command=self.call_graph_save_dialog)

        self.bind("<Destroy>", self.__destroy_menu)

    #noinspection PyUnusedLocal
    def __destroy_menu(self, event):
        try:
            self._menu.delete(self._menu_index)
        except TclError:
            pass

    def call_graph_save_dialog(self):
        file_name = tkFileDialog.asksaveasfilename(defaultextension='.ps',
            filetypes=[('PostScript', '.ps')], parent=self.winfo_toplevel(),
            title="Save graph as image")
        if file_name:
            with codecs.open(file_name, 'w', encoding='utf-8') as file:
                file.write(self._graph_canvas.postscript())


    def update_layout(self):
        try:
            self._iterations_plugin.iterate(50)
        except AttributeError:
            pass
Пример #16
0
class MainWindow:
    def __init__(self):
        self.root = Tk()
        self.input_bundle = Bundle()
        self.stamp_bundle = Bundle()
        self.controllers = []
        self.main_frame = None
        self.state_label = None
        self.state_label_var = None
        self.state_indicator = None
        self.state_indicator_var = None
        self.success_button = None
        self.failed_button = None
        self.sn_input = None
        self.title_list = []

        self.state_code = Setting.RESULT_OK
        self.mark = 0
        self.listener = MainListener(self)
        self.context = Context(self.input_bundle, self.stamp_bundle, self.listener)
        self.main()

    def main(self):
        self.initialize()
        self.context.init_controller(self.controllers)
        self.state_label_var = StringVar()
        self.state_indicator_var = StringVar()
        self.title = u"产线工具"
        self.label_frame_title = u"产线测试工具客户端"
        self.root.title(self.title)
        self.root.geometry("800x260")
        self.label_frame = LabelFrame(self.root, text=self.label_frame_title)
        self.label_frame.pack(fill="both", expand="yes")
        self.main_frame = Frame(self.label_frame)
        self.main_frame.pack()
        self.state_label_var.set(u"准备Smt测试")
        self.state_label = Label(
            self.main_frame, textvariable=self.state_label_var, font=("Arial", 12), width=40, height=7, bg="#00BFFF"
        )
        self.state_label.pack(side=LEFT)
        self.state_indicator_var.set(u"未测试")
        self.state_indicator = Label(
            self.main_frame, textvariable=self.state_indicator_var, font=("Arial", 12), width=40, height=7, bg="#00BFFF"
        )
        self.state_indicator.pack(side=LEFT)
        self.control_frame = LabelFrame(self.label_frame)
        self.control_frame.pack(side=BOTTOM, fill="both", expand="yes")
        self.success_button = Button(
            self.control_frame, text=u"成功", font=("Arial", 12), width=15, height=3, command=self.on_success_button
        )
        self.failed_button = Button(
            self.control_frame, text=u"失败", font=("Arial", 12), width=15, height=3, command=self.on_failed_button
        )
        self.success_button.pack(side=LEFT)
        self.failed_button.pack(side=RIGHT)
        self.failed_button["state"] = DISABLED
        self.sn_input = Entry(self.control_frame, width=50, font=Font(size=42))
        self.sn_input.pack()
        self.disable_buttons()
        self.sn_input.bind("<KeyRelease-Return>", self.on_sn_input)
        self.root.resizable(width=False, height=False)
        if Setting.DEBUG:
            self.label_text("Debug!!!")

    def on_sn_input(self, event):
        self.input_bundle.params[Setting.ID] = self.sn_input.get()
        print ("sn %s" % self.sn_input.get())
        self.start_run()

    def loop(self):
        print ("mainloop")
        self.sn_input.focus()
        self.root.mainloop()

    def initialize(self):
        # _rom_controller = RomController(0, stamp_bundle, listener)
        # controllers.append(_rom_controller)
        # title_list.append(u'rom烧写')
        _sn_controller = SnController(1, self.stamp_bundle, self.listener)
        self.controllers.append(_sn_controller)
        self.title_list.append(u"Sn烧录")
        _adb_controller = AdbController(2, self.stamp_bundle, self.listener)
        self.controllers.append(_adb_controller)
        self.title_list.append(u"Smt测试")
        # _data_controller = DataController(4, stamp_bundle, listener)
        # controllers.append(_data_controller)
        # title_list.append(u'数据保存')
        # _adjust_controller = AdjustController(5, stamp_bundle, listener)
        # controllers.append(_adjust_controller)
        # title_list.append(u'wifi校准')
        # _backup_controller = BackupController(6, stamp_bundle, listener)
        # controllers.append(_backup_controller)
        # title_list.append(u'it备份')
        # _book_set_controller = BookSetController(7, stamp_bundle, listener)
        # controllers.append(_book_set_controller)
        # title_list.append(u'预置书籍')
        # _reset_controller = ResetController(8, stamp_bundle, listener)
        # controllers.append(_reset_controller)
        # title_list.append(u'重置系统')
        # _print_controller = PrintController(9, stamp_bundle, listener)
        # controllers.append(_print_controller)
        # title_list.append(u'打印标签')
        # _weight_controller = WeightController(10, stamp_bundle, listener)
        # controllers.append(_weight_controller)
        # title_list.append(u'彩盒称重')

    def label_normal(self, text=None):
        self.state_label["background"] = "#00BFFF"
        self.state_indicator["background"] = "#00BFFF"
        if text is not None:
            self.label_failed(str(text))

    def label_success(self, text=None):
        self.state_label["background"] = "#2E8B57"
        self.state_indicator["background"] = "#2E8B57"
        if text is not None:
            self.label_failed(str(text))

    def label_failed(self, text=None):
        self.state_label["background"] = "#DC143C"
        self.state_indicator["background"] = "#DC143C"
        if text is not None:
            self.label_failed(str(text))

    def label_text(self, text):
        self.state_label_var.set(text)
        self.root.update()

    def status_text(self, text):
        self.state_indicator_var.set(text)
        if text.endswith("Pass"):
            self.label_success()
        elif text.endswith("Failed"):
            self.label_failed()
        else:
            self.label_normal()

    def _start_run(self):
        print ("Running")
        self.label_normal()
        self.context.run()

    def disable_buttons(self):
        self.success_button["state"] = DISABLED
        self.failed_button["state"] = DISABLED

    def enable_buttons(self):
        self.success_button["state"] = NORMAL
        self.failed_button["state"] = NORMAL

    def start_run(self):
        print ("wait running")
        self.disable_buttons()
        self.root.after(300, self._start_run)

    def on_failed_button(self):
        self.disable_buttons()
        self._retval = self.context.report_failure()
        if self._retval == Setting.RESULT_FAILED:
            self.context.clear()
        self.state_indicator_var.set(u"失败")
        self.state_label["background"] = "#DC143C"
        self.state_indicator["background"] = "#DC143C"
        self.start_run()

    def on_success_button(self):
        self.disable_buttons()

        self.state_label["background"] = "#DC143C"
        self.state_indicator["background"] = "#DC143C"
        self.start_run()
Пример #17
0
class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)

        self.pack()

        # First row
        f1 = LabelFrame(self,
                        text='NAND file with No$GBA footer',
                        padx=10,
                        pady=10)

        # NAND Button
        self.nand_mode = False

        nand_icon = PhotoImage(
            data=('R0lGODlhEAAQAIMAAAAAADMzM2ZmZpmZmczMzP///wAAAAAAAAA'
                  'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAYALAAAAAAQAB'
                  'AAAARG0MhJaxU4Y2sECAEgikE1CAFRhGMwSMJwBsU6frIgnR/bv'
                  'hTPrWUSDnGw3JGU2xmHrsvyU5xGO8ql6+S0AifPW8kCKpcpEQA7'))

        self.nand_button = Button(f1,
                                  image=nand_icon,
                                  command=self.change_mode,
                                  state=DISABLED)
        self.nand_button.image = nand_icon

        self.nand_button.pack(side='left')

        self.nand_file = StringVar()
        Entry(f1, textvariable=self.nand_file, state='readonly',
              width=40).pack(side='left')

        Button(f1, text='...', command=self.choose_nand).pack(side='left')

        f1.pack(padx=10, pady=10, fill=X)

        # Second row
        f2 = Frame(self)

        # Check box
        self.twilight = IntVar()
        self.twilight.set(1)

        self.chk = Checkbutton(
            f2,
            text='Install latest TWiLight Menu++ on custom firmware',
            variable=self.twilight)

        self.chk.pack(padx=10, anchor=W)

        # NAND operation frame
        self.nand_frame = LabelFrame(f2,
                                     text='NAND operation',
                                     padx=10,
                                     pady=10)

        self.nand_operation = IntVar()
        self.nand_operation.set(0)

        Radiobutton(self.nand_frame,
                    text='Uninstall unlaunch or install v1.4 stable',
                    variable=self.nand_operation,
                    value=0,
                    command=lambda: self.enable_entries(False)).pack(anchor=W)

        Radiobutton(self.nand_frame,
                    text='Remove No$GBA footer',
                    variable=self.nand_operation,
                    value=1,
                    command=lambda: self.enable_entries(False)).pack(anchor=W)

        Radiobutton(self.nand_frame,
                    text='Add No$GBA footer',
                    variable=self.nand_operation,
                    value=2,
                    command=lambda: self.enable_entries(True)).pack(anchor=W)

        fl = Frame(self.nand_frame)

        self.cid_label = Label(fl, text='eMMC CID', state=DISABLED)
        self.cid_label.pack(anchor=W, padx=(24, 0))

        self.cid = StringVar()
        self.cid_entry = Entry(fl,
                               textvariable=self.cid,
                               width=20,
                               state=DISABLED)
        self.cid_entry.pack(anchor=W, padx=(24, 0))

        fl.pack(side='left')

        fr = Frame(self.nand_frame)

        self.console_id_label = Label(fr, text='Console ID', state=DISABLED)
        self.console_id_label.pack(anchor=W)

        self.console_id = StringVar()
        self.console_id_entry = Entry(fr,
                                      textvariable=self.console_id,
                                      width=20,
                                      state=DISABLED)
        self.console_id_entry.pack(anchor=W)

        fr.pack(side='right')

        f2.pack(fill=X)

        # Third row
        f3 = Frame(self)

        self.start_button = Button(f3,
                                   text='Start',
                                   width=16,
                                   command=self.hiya,
                                   state=DISABLED)
        self.start_button.pack(side='left', padx=(0, 5))

        Button(f3, text='Quit', command=root.destroy,
               width=16).pack(side='left', padx=(5, 0))

        f3.pack(pady=(10, 20))

        self.folders = []
        self.files = []

    ################################################################################################
    def change_mode(self):
        if (self.nand_mode):
            self.nand_frame.pack_forget()
            self.chk.pack(padx=10, anchor=W)
            self.nand_mode = False

        else:
            if askokcancel(
                    'Warning',
                ('You are about to enter NAND mode. Do it only if you know '
                 'what you are doing. Proceed?'),
                    icon=WARNING):
                self.chk.pack_forget()
                self.nand_frame.pack(padx=10, pady=(0, 10), fill=X)
                self.nand_mode = True

    ################################################################################################
    def enable_entries(self, status):
        self.cid_label['state'] = (NORMAL if status else DISABLED)
        self.cid_entry['state'] = (NORMAL if status else DISABLED)
        self.console_id_label['state'] = (NORMAL if status else DISABLED)
        self.console_id_entry['state'] = (NORMAL if status else DISABLED)

    ################################################################################################
    def choose_nand(self):
        name = askopenfilename(filetypes=(('nand.bin', '*.bin'), ('DSi-1.mmc',
                                                                  '*.mmc')))
        self.nand_file.set(name.encode(getpreferredencoding()))

        self.nand_button['state'] = (NORMAL if self.nand_file.get() != '' else
                                     DISABLED)
        self.start_button['state'] = (NORMAL if self.nand_file.get() != '' else
                                      DISABLED)

    ################################################################################################
    def hiya(self):
        if not self.nand_mode:
            showinfo(
                'Info',
                'Now you will be asked to choose the SD card path that will be used '
                'for installing the custom firmware (or an output folder).\n\nIn order to avoid '
                'boot errors please assure it is empty before continuing.')
            self.sd_path = askdirectory()

            # Exit if no path was selected
            if self.sd_path == '':
                return

        # If adding a No$GBA footer, check if CID and ConsoleID values are OK
        elif self.nand_operation.get() == 2:
            cid = self.cid.get()
            console_id = self.console_id.get()

            # Check lengths
            if len(cid) != 32:
                showerror('Error', 'Bad eMMC CID')
                return

            elif len(console_id) != 16:
                showerror('Error', 'Bad Console ID')
                return

            # Parse strings to hex
            try:
                cid = cid.decode('hex')

            except TypeError:
                showerror('Error', 'Bad eMMC CID')
                return

            try:
                console_id = bytearray(reversed(console_id.decode('hex')))

            except TypeError:
                showerror('Error', 'Bad Console ID')
                return

        dialog = Toplevel(self)
        # Open as dialog (parent disabled)
        dialog.grab_set()
        dialog.title('Status')
        # Disable maximizing
        dialog.resizable(0, 0)

        frame = Frame(dialog, bd=2, relief=SUNKEN)

        scrollbar = Scrollbar(frame)
        scrollbar.pack(side=RIGHT, fill=Y)

        self.log = ThreadSafeText(frame,
                                  bd=0,
                                  width=52,
                                  height=20,
                                  yscrollcommand=scrollbar.set)
        self.log.pack()

        scrollbar.config(command=self.log.yview)

        frame.pack()

        Button(dialog, text='Close', command=dialog.destroy,
               width=16).pack(pady=10)

        # Center in window
        dialog.update_idletasks()
        width = dialog.winfo_width()
        height = dialog.winfo_height()
        dialog.geometry(
            '%dx%d+%d+%d' %
            (width, height, root.winfo_x() + (root.winfo_width() / 2) -
             (width / 2), root.winfo_y() + (root.winfo_height() / 2) -
             (height / 2)))

        # Check if we'll be adding a No$GBA footer
        if self.nand_mode and self.nand_operation.get() == 2:
            Thread(target=self.add_footer, args=(cid, console_id)).start()

        else:
            Thread(target=self.check_nand).start()

    ################################################################################################
    def check_nand(self):
        self.log.write('Checking NAND file...')

        # Read the NAND file
        try:
            with open(self.nand_file.get(), 'rb') as f:
                # Go to the No$GBA footer offset
                f.seek(-64, 2)
                # Read the footer's header :-)
                bstr = f.read(0x10)

                if bstr == b'DSi eMMC CID/CPU':
                    # Read the CID
                    bstr = f.read(0x10)
                    self.cid.set(hexlify(bstr).upper())
                    self.log.write('- eMMC CID: ' + self.cid.get())

                    # Read the console ID
                    bstr = f.read(8)
                    self.console_id.set(
                        hexlify(bytearray(reversed(bstr))).upper())
                    self.log.write('- Console ID: ' + self.console_id.get())

                    # Check we are making an unlaunch operation or removing the No$GBA footer
                    if self.nand_mode:
                        if self.nand_operation.get() == 0:
                            Thread(target=self.decrypt_nand).start()

                        else:
                            Thread(target=self.remove_footer).start()
                            pass

                    else:
                        Thread(target=self.get_latest_hiyacfw).start()

                else:
                    self.log.write('ERROR: No$GBA footer not found')

        except IOError:
            self.log.write('ERROR: Could not open the file ' +
                           path.basename(self.nand_file.get()))

    ################################################################################################
    def get_latest_hiyacfw(self):
        # Try to use already downloaded HiyaCFW archive
        filename = 'HiyaCFW.7z'

        try:
            if path.isfile(filename):
                self.log.write('\nPreparing HiyaCFW...')

            else:
                self.log.write('\nDownloading latest HiyaCFW release...')

                conn = urlopen(
                    'https://api.github.com/repos/RocketRobz/hiyaCFW/releases/latest'
                )
                latest = jsonify(conn)
                conn.close()

                urlretrieve(latest['assets'][0]['browser_download_url'],
                            filename)

            self.log.write('- Extracting HiyaCFW archive...')

            exe = path.join(sysname, '7za')

            proc = Popen([
                exe, 'x', '-bso0', '-y', filename, 'for PC',
                'for SDNAND SD card'
            ])

            ret_val = proc.wait()

            if ret_val == 0:
                self.folders.append('for PC')
                self.folders.append('for SDNAND SD card')
                # Got to decrypt NAND if bootloader.nds is present
                Thread(target=self.decrypt_nand if path.isfile(
                    'bootloader.nds') else self.extract_bios).start()

            else:
                self.log.write('ERROR: Extractor failed')

        except (URLError, IOError) as e:
            self.log.write('ERROR: Could not get HiyaCFW')
            if self.twilight.get():
                self.log.write(
                    '\nPlease download the latest versions of HiyaCFW and\nTWiLight Menu++ from:'
                )
                self.log.write(
                    '\nhttps://github.com/RocketRobz/hiyaCFW/releases')
                self.log.write(
                    'https://github.com/RocketRobz/TWiLightMenu/releases')
                self.log.write('\nThen place the files in this folder.')
            else:
                self.log.write(
                    '\nPlease download the latest version of HiyaCFW from:')
                self.log.write(
                    '\nhttps://github.com/RocketRobz/hiyaCFW/releases')
                self.log.write('\nThen place the file in this folder.')

        except OSError:
            self.log.write('ERROR: Could not execute ' + exe)

    ################################################################################################
    def extract_bios(self):
        self.log.write('\nExtracting ARM7/ARM9 BIOS from NAND...')

        exe = path.join(sysname, 'twltool')

        try:
            proc = Popen([exe, 'boot2', '--in', self.nand_file.get()])

            ret_val = proc.wait()

            if ret_val == 0:
                # Hash arm7.bin
                sha1_hash = sha1()

                with open('arm7.bin', 'rb') as f:
                    sha1_hash.update(f.read())

                self.log.write('- arm7.bin SHA1:\n  ' +
                               hexlify(sha1_hash.digest()).upper())

                # Hash arm9.bin
                sha1_hash = sha1()

                with open('arm9.bin', 'rb') as f:
                    sha1_hash.update(f.read())

                self.log.write('- arm9.bin SHA1:\n  ' +
                               hexlify(sha1_hash.digest()).upper())

                self.files.append('arm7.bin')
                self.files.append('arm9.bin')

                Thread(target=self.patch_bios).start()

            else:
                self.log.write('ERROR: Extractor failed')
                Thread(target=self.clean, args=(True, )).start()

        except OSError:
            self.log.write('ERROR: Could not execute ' + exe)
            Thread(target=self.clean, args=(True, )).start()

    ################################################################################################
    def patch_bios(self):
        self.log.write('\nPatching ARM7/ARM9 BIOS...')

        try:
            self.patcher(
                path.join('for PC', 'bootloader files',
                          'bootloader arm7 patch.ips'), 'arm7.bin')

            self.patcher(
                path.join('for PC', 'bootloader files',
                          'bootloader arm9 patch.ips'), 'arm9.bin')

            # Hash arm7.bin
            sha1_hash = sha1()

            with open('arm7.bin', 'rb') as f:
                sha1_hash.update(f.read())

            self.log.write('- Patched arm7.bin SHA1:\n  ' +
                           hexlify(sha1_hash.digest()).upper())

            # Hash arm9.bin
            sha1_hash = sha1()

            with open('arm9.bin', 'rb') as f:
                sha1_hash.update(f.read())

            self.log.write('- Patched arm9.bin SHA1:\n  ' +
                           hexlify(sha1_hash.digest()).upper())

            Thread(target=self.arm9_prepend).start()

        except IOError:
            self.log.write('ERROR: Could not patch BIOS')
            Thread(target=self.clean, args=(True, )).start()

        except Exception:
            self.log.write('ERROR: Invalid patch header')
            Thread(target=self.clean, args=(True, )).start()

    ################################################################################################
    def arm9_prepend(self):
        self.log.write('\nPrepending data to ARM9 BIOS...')

        try:
            with open('arm9.bin', 'rb') as f:
                data = f.read()

            with open('arm9.bin', 'wb') as f:
                with open(
                        path.join('for PC', 'bootloader files',
                                  'bootloader arm9 append to start.bin'),
                        'rb') as pre:
                    f.write(pre.read())

                f.write(data)

            # Hash arm9.bin
            sha1_hash = sha1()

            with open('arm9.bin', 'rb') as f:
                sha1_hash.update(f.read())

            self.log.write('- Prepended arm9.bin SHA1:\n  ' +
                           hexlify(sha1_hash.digest()).upper())

            Thread(target=self.make_bootloader).start()

        except IOError:
            self.log.write('ERROR: Could not prepend data to ARM9 BIOS')
            Thread(target=self.clean, args=(True, )).start()

    ################################################################################################
    def make_bootloader(self):
        self.log.write('\nGenerating new bootloader...')

        exe = (path.join('for PC', 'bootloader files', 'ndstool')
               if sysname == 'Windows' else path.join(sysname, 'ndsblc'))

        try:
            proc = Popen([
                exe, '-c', 'bootloader.nds', '-9', 'arm9.bin', '-7',
                'arm7.bin', '-t',
                path.join('for PC', 'bootloader files', 'banner.bin'), '-h',
                path.join('for PC', 'bootloader files', 'header.bin')
            ])

            ret_val = proc.wait()

            if ret_val == 0:
                # Hash bootloader.nds
                sha1_hash = sha1()

                with open('bootloader.nds', 'rb') as f:
                    sha1_hash.update(f.read())

                self.log.write('- bootloader.nds SHA1:\n  ' +
                               hexlify(sha1_hash.digest()).upper())

                Thread(target=self.decrypt_nand).start()

            else:
                self.log.write('ERROR: Generator failed')
                Thread(target=self.clean, args=(True, )).start()

        except OSError:
            self.log.write('ERROR: Could not execute ' + exe)
            Thread(target=self.clean, args=(True, )).start()

    ################################################################################################
    def decrypt_nand(self):
        self.log.write('\nDecrypting NAND...')

        exe = path.join(sysname, 'twltool')

        try:
            proc = Popen([
                exe, 'nandcrypt', '--in',
                self.nand_file.get(), '--out',
                self.console_id.get() + '.img'
            ])

            ret_val = proc.wait()

            if ret_val == 0:
                if not self.nand_mode:
                    self.files.append(self.console_id.get() + '.img')

                Thread(target=self.mount_nand).start()

            else:
                self.log.write('ERROR: Decryptor failed')
                Thread(target=self.clean, args=(True, )).start()

        except OSError:
            self.log.write('ERROR: Could not execute ' + exe)
            Thread(target=self.clean, args=(True, )).start()

    ################################################################################################
    def mount_nand(self):
        self.log.write('\nMounting decrypted NAND...')

        try:
            if sysname == 'Windows':
                exe = osfmount

                cmd = [
                    osfmount, '-a', '-t', 'file', '-f',
                    self.console_id.get() + '.img', '-m', '#:', '-o', 'ro,rem'
                ]

                if self.nand_mode:
                    cmd[-1] = 'rw,rem'

                proc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)

                outs, errs = proc.communicate()

                if proc.returncode == 0:
                    self.mounted = search(r'[a-zA-Z]:\s',
                                          outs).group(0).strip()
                    self.log.write('- Mounted on drive ' + self.mounted)

                else:
                    self.log.write('ERROR: Mounter failed')
                    Thread(target=self.clean, args=(True, )).start()
                    return

            elif sysname == 'Darwin':
                exe = 'hdiutil'

                cmd = [
                    exe, 'attach', '-imagekey',
                    'diskimage-class=CRawDiskImage', '-nomount',
                    self.console_id.get() + '.img'
                ]

                if not self.nand_mode:
                    cmd.insert(2, '-readonly')

                proc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)

                outs, errs = proc.communicate()

                if proc.returncode == 0:
                    self.raw_disk = search(r'^\/dev\/disk\d+', outs).group(0)
                    self.log.write('- Mounted raw disk on ' + self.raw_disk)

                    cmd = [exe, 'mount', self.raw_disk + 's1']

                    if not self.nand_mode:
                        cmd.insert(2, '-readonly')

                    proc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)

                    outs, errs = proc.communicate()

                    if proc.returncode == 0:
                        self.mounted = search(r'\/Volumes\/.+', outs).group(0)
                        self.log.write('- Mounted volume on ' + self.mounted)

                    else:
                        self.log.write('ERROR: Mounter failed')
                        Thread(target=self.clean, args=(True, )).start()
                        return

                else:
                    self.log.write('ERROR: Mounter failed')
                    Thread(target=self.clean, args=(True, )).start()
                    return

            else:  # Linux
                exe = 'losetup'

                cmd = [
                    exe, '-P', '-f', '--show',
                    self.console_id.get() + '.img'
                ]

                if not self.nand_mode:
                    cmd.insert(2, '-r')

                proc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
                outs, errs = proc.communicate()

                if proc.returncode == 0:
                    self.loop_dev = search(r'\/dev\/loop\d+', outs).group(0)
                    self.log.write('- Mounted loop device on ' + self.loop_dev)

                    exe = 'mount'

                    self.mounted = '/mnt'

                    cmd = [
                        exe, '-t', 'vfat', self.loop_dev + 'p1', self.mounted
                    ]

                    if not self.nand_mode:
                        cmd.insert(1, '-r')

                    proc = Popen(cmd)

                    ret_val = proc.wait()

                    if ret_val == 0:
                        self.log.write('- Mounted partition on ' +
                                       self.mounted)

                    else:
                        self.log.write('ERROR: Mounter failed')
                        Thread(target=self.clean, args=(True, )).start()
                        return

                else:
                    self.log.write('ERROR: Mounter failed')
                    Thread(target=self.clean, args=(True, )).start()
                    return

            # Check we are making an unlaunch operation
            Thread(target=self.unlaunch_proc if self.nand_mode else self.
                   extract_nand).start()

        except OSError:
            self.log.write('ERROR: Could not execute ' + exe)
            Thread(target=self.clean, args=(True, )).start()

    ################################################################################################
    def extract_nand(self):
        self.log.write('\nExtracting files from NAND...')

        err = False

        # Reset copied files cache
        _path_created.clear()
        try:
            copy_tree(self.mounted, self.sd_path, preserve_mode=0, update=1)

        except:
            self.log.write('ERROR: Extractor failed')
            err = True

        Thread(target=self.unmount_nand, args=(err, )).start()

    ################################################################################################
    def unmount_nand(self, err=False):
        self.log.write('\nUnmounting NAND...')

        try:
            if sysname == 'Windows':
                exe = osfmount

                proc = Popen([osfmount, '-D', '-m', self.mounted])

            elif sysname == 'Darwin':
                exe = 'hdiutil'

                proc = Popen([exe, 'detach', self.raw_disk])

            else:  # Linux
                exe = 'umount'

                proc = Popen([exe, self.mounted])

                ret_val = proc.wait()

                if ret_val == 0:
                    exe = 'losetup'

                    proc = Popen([exe, '-d', self.loop_dev])

                else:
                    self.log.write('ERROR: Unmounter failed')
                    Thread(target=self.clean, args=(True, )).start()
                    return

            ret_val = proc.wait()

            if ret_val == 0:
                if err:
                    Thread(target=self.clean, args=(True, )).start()

                else:
                    Thread(target=self.encrypt_nand if self.
                           nand_mode else self.get_launcher).start()

            else:
                self.log.write('ERROR: Unmounter failed')
                Thread(target=self.clean, args=(True, )).start()

        except OSError:
            self.log.write('ERROR: Could not execute ' + exe)
            Thread(target=self.clean, args=(True, )).start()

    ################################################################################################
    def get_launcher(self):
        app = self.detect_region()

        # Stop if no supported region was found
        if not app:
            self.files.append('bootloader.nds')
            Thread(target=self.clean, args=(True, )).start()
            return

        # Check if unlaunch was installed on the NAND dump
        if path.getsize(
                path.join(self.sd_path, 'title', '00030017', app, 'content',
                          'title.tmd')) > 520:
            self.log.write('- WARNING: Unlaunch installed on the NAND dump')

        # Try to use already downloaded launcher
        try:
            if path.isfile(self.launcher_region):
                self.log.write('\nPreparing ' + self.launcher_region +
                               ' launcher...')

            else:
                self.log.write('\nDownloading ' + self.launcher_region +
                               ' launcher...')

                urlretrieve(
                    'https://raw.githubusercontent.com/mondul/HiyaCFW-Helper/master/'
                    'launchers/' + self.launcher_region, self.launcher_region)

            self.log.write('- Decrypting launcher...')

            exe = path.join(sysname, '7za')

            proc = Popen([
                exe, 'x', '-bso0', '-y', '-p' + app, self.launcher_region,
                '00000002.app'
            ])

            ret_val = proc.wait()

            if ret_val == 0:
                # Hash 00000002.app
                sha1_hash = sha1()

                with open('00000002.app', 'rb') as f:
                    sha1_hash.update(f.read())

                self.log.write('- Patched launcher SHA1:\n  ' +
                               hexlify(sha1_hash.digest()).upper())

                Thread(target=self.install_hiyacfw,
                       args=(path.join(self.sd_path, 'title', '00030017', app,
                                       'content', '00000002.app'), )).start()

            else:
                self.log.write('ERROR: Extractor failed')
                Thread(target=self.clean, args=(True, )).start()

        except IOError:
            self.log.write('ERROR: Could not download ' +
                           self.launcher_region + ' launcher')
            Thread(target=self.clean, args=(True, )).start()

        except OSError:
            self.log.write('ERROR: Could not execute ' + exe)
            Thread(target=self.clean, args=(True, )).start()

    ################################################################################################
    def install_hiyacfw(self, launcher_path):
        self.log.write('\nCopying HiyaCFW files...')

        try:
            self.log.write('- Deleting stock launcher title.tmd...')
            if self.launcher_region == 'USA':
                remove(
                    path.join(self.sd_path, 'title', '00030017', '484e4145',
                              'content', 'title.tmd'))
            if self.launcher_region == 'JAP':
                remove(
                    path.join(self.sd_path, 'title', '00030017', '484e414a',
                              'content', 'title.tmd'))
            if self.launcher_region == 'EUR':
                remove(
                    path.join(self.sd_path, 'title', '00030017', '484e4150',
                              'content', 'title.tmd'))
            if self.launcher_region == 'AUS':
                remove(
                    path.join(self.sd_path, 'title', '00030017', '484e4155',
                              'content', 'title.tmd'))
        except:
            pass

        copy_tree('for SDNAND SD card', self.sd_path, update=1)
        move('bootloader.nds', path.join(self.sd_path, 'hiya',
                                         'bootloader.nds'))
        move('00000002.app', launcher_path)

        Thread(target=self.get_latest_twilight if self.twilight.get() ==
               1 else self.clean).start()

    ################################################################################################
    def get_latest_twilight(self):
        filename = False

        # Release archives names
        names = ('TWiLightMenu.7z', 'DSiMenuPP.7z', 'DSiMenuPlusPlus.7z',
                 'SRLoader.7z')

        for name in names:
            if (path.isfile(name)):
                filename = name
                break

        try:
            if filename:
                self.log.write('\nPreparing custom firmware...')

            else:
                self.log.write(
                    '\nDownloading latest TWiLight Menu++ release...')

                conn = urlopen(
                    'https://api.github.com/repos/RocketRobz/TWiLightMenu/releases/'
                    'latest')
                latest = jsonify(conn)
                conn.close()

                filename = names[0]
                urlretrieve(latest['assets'][0]['browser_download_url'],
                            filename)

            self.log.write('- Extracting ' + filename[:-3] + ' archive...')

            exe = path.join(sysname, '7za')

            proc = Popen([
                exe, 'x', '-bso0', '-y', filename, 'Autoboot for HiyaCFW',
                'CFW - SDNAND root', 'DSiWare (' + self.launcher_region + ')',
                '_nds', 'roms', 'BOOT.NDS'
            ])

            ret_val = proc.wait()

            if ret_val == 0:
                self.folders.append('Autoboot for HiyaCFW')
                self.folders.append('CFW - SDNAND root')
                self.folders.append('DSiWare (' + self.launcher_region + ')')
                Thread(target=self.install_twilight,
                       args=(filename[:-3], )).start()

            else:
                self.log.write('ERROR: Extractor failed')
                Thread(target=self.clean, args=(True, )).start()

        except (URLError, IOError) as e:
            self.log.write('ERROR: Could not get TWiLight Menu++')
            Thread(target=self.clean, args=(True, )).start()

        except OSError:
            self.log.write('ERROR: Could not execute ' + exe)
            Thread(target=self.clean, args=(True, )).start()

    ################################################################################################
    def install_twilight(self, name):
        self.log.write('\nCopying ' + name + ' files...')

        copy_tree('CFW - SDNAND root', self.sd_path, update=1)
        move('_nds', path.join(self.sd_path, '_nds'))
        move('roms', path.join(self.sd_path, 'roms'))
        move('BOOT.NDS', path.join(self.sd_path, 'BOOT.NDS'))
        copy_tree('DSiWare (' + self.launcher_region + ')',
                  path.join(self.sd_path, 'roms', 'dsiware'),
                  update=1)
        move(path.join('Autoboot for HiyaCFW', 'autoboot.bin'),
             path.join(self.sd_path, 'hiya', 'autoboot.bin'))

        # Set files as read-only
        twlcfg0 = path.join(self.sd_path, 'shared1', 'TWLCFG0.dat')
        twlcfg1 = path.join(self.sd_path, 'shared1', 'TWLCFG1.dat')

        if sysname == 'Darwin':
            Popen(['chflags', 'uchg', twlcfg0, twlcfg1]).wait()

        elif sysname == 'Linux':
            Popen([path.join('Linux', 'fatattr'), '+R', twlcfg0,
                   twlcfg1]).wait()

        else:
            chmod(twlcfg0, 292)
            chmod(twlcfg1, 292)

        # Generate launchargs
        for app in listdir(path.join(self.sd_path, 'title', '00030004')):
            try:
                for title in listdir(
                        path.join(self.sd_path, 'title', '00030004', app,
                                  'content')):
                    if title.endswith('.app'):
                        with open(
                                path.join(self.sd_path, 'roms', 'dsiware',
                                          app + '.launcharg'),
                                'w') as launcharg:
                            launcharg.write('sd:/title/00030004/' + app + '/')

            except:
                pass

        Thread(target=self.clean).start()

    ################################################################################################
    def clean(self, err=False):
        self.log.write('\nCleaning...')

        while len(self.folders) > 0:
            rmtree(self.folders.pop(), ignore_errors=True)

        while len(self.files) > 0:
            try:
                remove(self.files.pop())

            except:
                pass

        if err:
            self.log.write('Done')
            return

        # Get logged user in Linux
        if sysname == 'Linux':
            from os import getlogin

            # Workaround for some Linux systems where this function does not work
            try:
                ug = getlogin()

            except OSError:
                ug = 'root'

        if (self.nand_mode):
            file = self.console_id.get() + self.suffix + '.bin'

            rename(self.console_id.get() + '.img', file)

            # Change owner of the file in Linux
            if sysname == 'Linux':
                Popen(['chown', '-R', ug + ':' + ug, file]).wait()

            self.log.write('\nDone!\nModified NAND stored as\n' + file)
            return

        # Change owner of the out folder in Linux
        if sysname == 'Linux':
            Popen(['chown', '-R', ug + ':' + ug, self.sd_path]).wait()

        self.log.write(
            'Done!\nExtract your SD card and insert it into your DSi')

    ################################################################################################
    def patcher(self, patchpath, filepath):
        patch_size = path.getsize(patchpath)

        patchfile = open(patchpath, 'rb')

        if patchfile.read(5) != b'PATCH':
            patchfile.close()
            raise Exception()

        target = open(filepath, 'r+b')

        # Read First Record
        r = patchfile.read(3)

        while patchfile.tell() not in [patch_size, patch_size - 3]:
            # Unpack 3-byte pointers.
            offset = self.unpack_int(r)
            # Read size of data chunk
            r = patchfile.read(2)
            size = self.unpack_int(r)

            if size == 0:  # RLE Record
                r = patchfile.read(2)
                rle_size = self.unpack_int(r)
                data = patchfile.read(1) * rle_size

            else:
                data = patchfile.read(size)

            # Write to file
            target.seek(offset)
            target.write(data)
            # Read Next Record
            r = patchfile.read(3)

        if patch_size - 3 == patchfile.tell():
            trim_size = self.unpack_int(patchfile.read(3))
            target.truncate(trim_size)

        # Cleanup
        target.close()
        patchfile.close()

    ################################################################################################
    def unpack_int(self, bstr):
        # Read an n-byte big-endian integer from a byte string
        (ret_val, ) = unpack_from('>I', b'\x00' * (4 - len(bstr)) + bstr)
        return ret_val

    ################################################################################################
    def detect_region(self):
        REGION_CODES = {
            '484e4145': 'USA',
            '484e414a': 'JAP',
            '484e4150': 'EUR',
            '484e4155': 'AUS'
        }

        # Autodetect console region
        base = self.mounted if self.nand_mode else self.sd_path

        try:
            for app in listdir(path.join(base, 'title', '00030017')):
                for file in listdir(
                        path.join(base, 'title', '00030017', app, 'content')):
                    if file.endswith('.app'):
                        try:
                            self.log.write('- Detected ' + REGION_CODES[app] +
                                           ' console NAND dump')
                            self.launcher_region = REGION_CODES[app]
                            return app

                        except KeyError:
                            self.log.write('ERROR: Unsupported console region')
                            return False

            self.log.write('ERROR: Could not detect console region')

        except OSError as e:
            self.log.write('ERROR: ' + e.strerror + ': ' + e.filename)

        return False

    ################################################################################################
    def unlaunch_proc(self):
        self.log.write('\nChecking unlaunch status...')

        app = self.detect_region()

        # Stop if no supported region was found
        if not app:
            # TODO: Unmount NAND
            return

        tmd = path.join(self.mounted, 'title', '00030017', app, 'content',
                        'title.tmd')

        tmd_size = path.getsize(tmd)

        if tmd_size == 520:
            self.log.write('- Not installed. Downloading v1.4...')

            try:
                filename = urlretrieve(
                    'http://problemkaputt.de/unlau14.zip')[0]

                exe = path.join(sysname, '7za')

                proc = Popen(
                    [exe, 'x', '-bso0', '-y', filename, 'UNLAUNCH.DSI'])

                ret_val = proc.wait()

                if ret_val == 0:
                    self.files.append(filename)
                    self.files.append('UNLAUNCH.DSI')

                    self.log.write('- Installing unlaunch...')

                    self.suffix = '-unlaunch'

                    with open(tmd, 'ab') as f:
                        with open('UNLAUNCH.DSI', 'rb') as unl:
                            f.write(unl.read())

                    # Set files as read-only
                    for file in listdir(
                            path.join(self.mounted, 'title', '00030017', app,
                                      'content')):
                        file = path.join(self.mounted, 'title', '00030017',
                                         app, 'content', file)

                        if sysname == 'Darwin':
                            Popen(['chflags', 'uchg', file]).wait()

                        elif sysname == 'Linux':
                            Popen([path.join('Linux', 'fatattr'), '+R',
                                   file]).wait()

                        else:
                            chmod(file, 292)

                else:
                    self.log.write('ERROR: Extractor failed')
                    # TODO: Unmount NAND

            except IOError:
                self.log.write('ERROR: Could not get unlaunch')
                # TODO: Unmount NAND

            except OSError:
                self.log.write('ERROR: Could not execute ' + exe)
                # TODO: Unmount NAND

        else:
            self.log.write('- Installed. Uninstalling...')

            self.suffix = '-no-unlaunch'

            # Set files as read-write
            for file in listdir(
                    path.join(self.mounted, 'title', '00030017', app,
                              'content')):
                file = path.join(self.mounted, 'title', '00030017', app,
                                 'content', file)

                if sysname == 'Darwin':
                    Popen(['chflags', 'nouchg', file]).wait()

                elif sysname == 'Linux':
                    Popen([path.join('Linux', 'fatattr'), '-R', file]).wait()

                else:
                    chmod(file, 438)

            with open(tmd, 'r+b') as f:
                f.truncate(520)

        Thread(target=self.unmount_nand).start()

    ################################################################################################
    def encrypt_nand(self):
        self.log.write('\nEncrypting back NAND...')

        exe = path.join(sysname, 'twltool')

        try:
            proc = Popen(
                [exe, 'nandcrypt', '--in',
                 self.console_id.get() + '.img'])

            ret_val = proc.wait()

            if ret_val == 0:
                Thread(target=self.clean).start()

            else:
                self.log.write('ERROR: Encryptor failed')

        except OSError:
            self.log.write('ERROR: Could not execute ' + exe)

    ################################################################################################
    def remove_footer(self):
        self.log.write('\nRemoving No$GBA footer...')

        file = self.console_id.get() + '-no-footer.bin'

        try:
            copyfile(self.nand_file.get(), file)

            # Back-up footer info
            with open(self.console_id.get() + '-info.txt', 'wb') as f:
                f.write('eMMC CID: ' + self.cid.get() + '\r\n')
                f.write('Console ID: ' + self.console_id.get() + '\r\n')

            with open(file, 'r+b') as f:
                # Go to the No$GBA footer offset
                f.seek(-64, 2)
                # Remove footer
                f.truncate()

            # Change owner of the file in Linux
            if sysname == 'Linux':
                from os import getlogin

                ug = getlogin()

                Popen(['chown', '-R', ug + ':' + ug, file]).wait()

            self.log.write('\nDone!\nModified NAND stored as\n' + file +
                           '\nStored footer info in ' + self.console_id.get() +
                           '-info.txt')

        except IOError:
            self.log.write('ERROR: Could not open the file ' +
                           path.basename(self.nand_file.get()))

    ################################################################################################
    def add_footer(self, cid, console_id):
        self.log.write('Adding No$GBA footer...')

        file = self.console_id.get() + '-footer.bin'

        try:
            copyfile(self.nand_file.get(), file)

            with open(file, 'r+b') as f:
                # Go to the No$GBA footer offset
                f.seek(-64, 2)
                # Read the footer's header :-)
                bstr = f.read(0x10)

                # Check if it already has a footer
                if bstr == b'DSi eMMC CID/CPU':
                    self.log.write('ERROR: File already has a No$GBA footer')
                    f.close()
                    remove(file)
                    return

                # Go to the end of file
                f.seek(0, 2)
                # Write footer
                f.write(b'DSi eMMC CID/CPU')
                f.write(cid)
                f.write(console_id)
                f.write('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
                        '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')

            self.log.write('\nDone!\nModified NAND stored as\n' + file)

        except IOError:
            self.log.write('ERROR: Could not open the file ' +
                           path.basename(self.nand_file.get()))
Пример #18
0
    def __init__(self, master=None, main=None):
        Frame.__init__(self, master)

        self.parent = master
        self.main = main

        self.parent.geometry("336x424")
        self.parent.title(os.getenv("NAME") + " - Board Config")
        self.master.configure(padx=10, pady=10)

        self.intvar = IntVar()

        #Arch
        self.arch_var = IntVar()
        lf_arch = LabelFrame(self.parent, text="Architecture")
        lf_arch.pack(fill=X, expand=True, side=TOP)

        frame_arch = Frame(lf_arch)
        frame_arch.pack(fill=X, expand=True, side=TOP)

        frame_left1 = Frame(frame_arch)
        frame_left1.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right1 = Frame(frame_arch)
        frame_right1.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_arch_8 = Radiobutton(frame_left1, text="8-bit ", anchor="w", width=10, value=8, variable=self.arch_var, command=self.update_mode)
        self.radioButton_arch_8.pack(fill=X, side=TOP)

        self.radioButton_arch_32 = Radiobutton(frame_right1, text="32-bit", anchor="w", width=10, value=32, variable=self.arch_var, command=self.update_mode)
        self.radioButton_arch_32.pack(fill=X, side=TOP)


        #Mode
        self.mode_var = StringVar()
        lf_mode = LabelFrame(self.parent, text="Programming mode")
        lf_mode.pack(fill=X, expand=True, side=TOP)

        frame_mode = Frame(lf_mode)
        frame_mode.pack(fill=X, expand=True, side=TOP)

        frame_left2 = Frame(frame_mode)
        frame_left2.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right2 = Frame(frame_mode)
        frame_right2.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_mode_icsp = Radiobutton(frame_left2, text="ICSP", anchor="w", width=10, value="icsp", variable=self.mode_var, command=self.update_mode)
        self.radioButton_mode_icsp.pack(side=TOP, fill=X)

        self.radioButton_mode_bootloader = Radiobutton(frame_right2, text="Bootloader", anchor="w", width=10, value="bootloader", variable=self.mode_var, command=self.update_mode)
        self.radioButton_mode_bootloader.pack(side=TOP, fill=X)


        #Bootloader
        self.boot_var = StringVar()
        self.lf_boot = LabelFrame(self.parent, text="Bootloader")
        self.lf_boot.pack(fill=X, expand=True, side=TOP)

        frame_boot = Frame(self.lf_boot)
        frame_boot.pack(fill=X, expand=True, side=TOP)

        frame_left3 = Frame(frame_boot)
        frame_left3.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right3 = Frame(frame_boot)
        frame_right3.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_bootloader_v1_v2 = Radiobutton(frame_left3, text="v1.x or v2.x", anchor="w", width=10, value="v1_v2", variable=self.boot_var)
        self.radioButton_bootloader_v1_v2.pack(fill=X, side=TOP, expand=True)
        self.radioButton_bootloader_v4 = Radiobutton(frame_right3, text="v4.x", anchor="w", width=10, value="v4", variable=self.boot_var)
        self.radioButton_bootloader_v4.pack(fill=X, side=TOP, expand=True)


        #Devices 8bit
        self.dev8_var = StringVar()
        self.lf_dev8 = LabelFrame(self.parent, text="Devices")
        self.lf_dev8.pack(fill=X, expand=True, side=TOP)

        self.frame_8b = Frame(self.lf_dev8)
        self.frame_8b.pack(fill=X, expand=True, side=TOP)


        #Devices 32bit
        self.dev32_var = StringVar()
        self.lf_dev32 = LabelFrame(self.parent, text="Devices")
        self.lf_dev32.pack(fill=X, expand=True, side=TOP)

        self.frame_32b = Frame(self.lf_dev32)
        self.frame_32b.pack(fill=X, expand=True, side=TOP)

        frame_buttons = Frame(self.parent)
        Button(frame_buttons, text="Accept", command=self.accept_config).pack(fill=X, expand=True, side=RIGHT)
        Button(frame_buttons, text="Cancel", command=self.quit).pack(fill=X, expand=True, side=LEFT)
        frame_buttons.pack(fill=X, expand=True, side=BOTTOM)

        frame_advance = Frame(self.parent)
        self.advanceoptions = Button(frame_advance, text="Advance options", command=self.advance)
        self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM)
        frame_advance.pack(fill=X, expand=True, side=BOTTOM)

        frame_warning = Frame(self.parent)
        self.label_warning = Label(frame_warning, fg="red", text="warning!", anchor="w")
        self.label_warning.pack(fill=X, expand=True, side=BOTTOM)
        frame_warning.pack(fill=X, expand=True, side=BOTTOM)

        self.build_devices_arch()
        self.load_config()
        self.init_groups()
Пример #19
0
class view(Tk):
    
    def mkStringVar(self, s):
        R = StringVar()
        R.set(s)
        return R
    
    def mkLabel(self, f, T, r, c, rs=1, cs=1):
        if isinstance(T, type(StringVar())):
            R = Label(f, textvariable = T, relief=GROOVE, borderwidth=2)
        else:
            R = Label(f, text = T, relief=GROOVE, borderwidth=2)
        R.grid(row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens")
        return R

    def mkLabelList(self, f, SV, r):
        R = []
        for i in range(len(SV)):
            R.append(self.mkLabel(f, SV[i], r, i+1))
        return R

    def mkButton(self, f, t, r, c, rs=1, cs=1):
        R = Button(f, text=t)
        R.grid( row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens")
        return R

# ===== HALT et cetera =========================================================

    def mkHaltArea(self, f):
        self.HALTframe = Frame(f)
        self.HALTframe.config(relief=GROOVE)
        self.HALTframe.config(borderwidth=2)

        self.HALTbutton = Button(self.HALTframe, text = "HALT", width=10)
        self.READMEbutton = Button(self.HALTframe, text = "README", width=10)

        self.HALTbutton.config(borderwidth=2, relief=GROOVE, fg="red")
        self.HALTbutton.config(command = self.quit)
        self.READMEbutton.config(borderwidth=2, relief=GROOVE, fg="red")

        self.HALTbutton.pack(side=LEFT, fill=BOTH)
        self.READMEbutton.pack(side=RIGHT, fill=BOTH)

        self.HALTframe.grid(row=0, column=9, rowspan=1, columnspan=4, sticky="wens")

# ==============================================================================

    def mkProgramControl(self, f):        
        self.PROGRAMCONTROLframe = Frame(f)
        self.PROGRAMCONTROLframe.config(relief=GROOVE)
        self.PROGRAMCONTROLframe.config(borderwidth=2)

        self.runButton = Button(self.PROGRAMCONTROLframe, text="RUN", width=10)
        self.runButton.grid(row=0, column=0, sticky="wens", padx=29, pady=7)

        self.stepButton = Button(self.PROGRAMCONTROLframe, text="STEP", width=10)
        self.stepButton.grid(row=1, column=0, sticky="wens", padx=29, pady=5)

        self.noStepButton = Button(self.PROGRAMCONTROLframe, text="NOSTEP", width=10)
        self.noStepButton.grid(row=2, column=0, sticky="wens", padx=29, pady=7)

        self.PROGRAMCONTROLframe.grid(row=17, column=11, rowspan=6, columnspan=2, sticky="wens")

# ==============================================================================

    def getPGMfileName(self):
        options = {'filetypes': [('pgm files', '.pgm')]}
        f = askopenfilename(**options)
        g = f.split('/')
        self.filenameVar.set(g[len(g) - 1])
        return f

    def mkProgramLoad(self, f):
        self.PROGRAMLOADframe = Frame(f)
        self.PROGRAMLOADframe.config(relief=GROOVE)
        self.PROGRAMLOADframe.config(borderwidth=2)

        self.loadPGMbutton = Button(self.PROGRAMLOADframe, text="Load PGM")
        self.loadPGMbutton.config(width=14)
        self.loadPGMbutton.pack(side=LEFT, fill=BOTH, padx=20, pady=5)
        
        self.filenameVar = StringVar()
        self.filenameVar.set("*****.pgm")
        
        self.fileNameLabel = Label(self.PROGRAMLOADframe, textvariable=self.filenameVar)
        self.fileNameLabel.config(relief=GROOVE, borderwidth=2, width=17)
        self.fileNameLabel.pack(side=RIGHT, fill=BOTH, padx=20, pady=5)

        self.PROGRAMLOADframe.grid(row=15, column=9, rowspan=2, columnspan=4, sticky="wens")

# ==============================================================================

    def mkMemory(self, f):
        self.MEMORYframe = Frame(f)
        self.MEMORYframe.config(relief=GROOVE)
        self.MEMORYframe.config(borderwidth=2)

        E = Frame(self.MEMORYframe)

        self.CLEAR = self.mkButton(E, "ClearMem", 0, 0)
        self.RANDOM = self.mkButton(E, "RandomMem", 0, 1)
        self.READ = self.mkButton(E, "ReadMem", 1, 0)
        self.WRITE = self.mkButton(E, "WriteMem", 1, 1)
        self.BUSTOMEM = self.mkButton(E, "BusToMem", 2, 0, 1, 2)

        F = Frame(self.MEMORYframe)
        
        for i in Range8:
            L = Label(F, textvariable=self.MEMORY[i])
            L.config(relief=GROOVE, borderwidth=2, bg="black", fg="yellow", height=1)
            L.grid(row=0, column=i, sticky="wens", ipadx=5)

        E.pack(side=TOP)
        F.pack(side=BOTTOM)

        self.MEMORYframe.grid(row=18, column=9, rowspan=5, columnspan=2, sticky="wens")

# ==============================================================================

    def mkDataBus(self, f):
        self.DBframe = Frame(f)
        self.DBframe.config(relief=GROOVE)
        self.DBframe.config(borderwidth=2, bg="red")
        self.DBframe.grid(row=0, column=0, rowspan=1, \
                          columnspan=9, sticky="wens")
        
        self.databusLabel = Label(self.DBframe, text="Data\nBus", width=10)
        self.databusLabel.pack(side=LEFT)

        self.DATABUSbuttons = []
        for i in Range8:
            b = Button(self.DBframe, textvariable=self.DATABUS[i])
            b.pack(side=LEFT, fill=BOTH)
            self.DATABUSbuttons.append(b)

    def mkAddressBus(self, f):
        self.ABframe = Frame(f)
        self.ABframe.config(relief=GROOVE)
        self.ABframe.config(borderwidth=2, bg="red")
        self.ABframe.grid(row=26, column=0, rowspan=1, columnspan=13, sticky="wens")
        
        self.AddressBusLabel = Label(self.ABframe, text="Address\nBus", width=12)
        self.AddressBusLabel.pack(side=LEFT)
        
        self.ADDRESSBUSbuttons = []
        for i in Range16:
            b = Button(self.ABframe, textvariable=self.ADDRESSBUS[i])
            b.pack(side=LEFT, fill=BOTH, ipadx=2)
            self.ADDRESSBUSbuttons.append(b)

# ==============================================================================

    def mkALU(self, f):
        self.ALUframe = Frame(f)
        self.ALUframe.config(relief=GROOVE)
        self.ALUframe.config(borderwidth=2)
        
        self.mkFunctionChoice(self.ALUframe)
        self.mkStates(self.ALUframe)
        
        self.ALUframe.grid(row=23, column=9, rowspan=3, columnspan=4, sticky="wens")
        
    def mkFunctionChoice(self, f):
        self.FUNCTIONframe = Frame(f)
        self.FUNCTIONframe.config(relief=GROOVE)
        self.FUNCTIONframe.config(borderwidth=2)

        self.F0label = Label(self.FUNCTIONframe, text="F0", borderwidth=2, relief=GROOVE)
        self.F0label.grid(row=0, column=0, sticky="wens", padx=5)

        self.F1label = Label(self.FUNCTIONframe, text="F1", borderwidth=2, relief=GROOVE)
        self.F1label.grid(row=0, column=1, sticky="wens", padx=8)

        self.F2label = Label(self.FUNCTIONframe, text="F2", borderwidth=2, relief=GROOVE)
        self.F2label.grid(row=0, column=2, sticky="wens", padx=5)

        self.FUNCTIONbuttons = []

        self.F0button = Button(self.FUNCTIONframe)
        self.F0button.config(textvariable=self.FUNCTION[0], borderwidth=2, relief=GROOVE)
        self.F1button = Button(self.FUNCTIONframe)
        self.F1button.config(textvariable=self.FUNCTION[1], borderwidth=2, relief=GROOVE)
        self.F2button = Button(self.FUNCTIONframe)
        self.F2button.config(textvariable=self.FUNCTION[2], borderwidth=2, relief=GROOVE)

        self.FUNCTIONbuttons.append(self.F0button)        
        self.FUNCTIONbuttons.append(self.F1button)
        self.FUNCTIONbuttons.append(self.F2button)

        for i in Range3:
            self.FUNCTIONbuttons[i].grid(row=1, column=i, sticky="wens", padx=5)

        self.FUNCTIONframe.pack(side=LEFT, padx=8, pady=3)

    def mkStates(self, f):
        self.STATESframe = Frame(f)
        self.STATESframe.config(relief=GROOVE)
        self.STATESframe.config(borderwidth=2)

        self.CARRYtag = Label(self.STATESframe, text = " carry ", borderwidth=2, relief=GROOVE)
        self.CARRYtag.grid(row=0, column=0, padx=5, pady=2, sticky="wens")
        
        self.ZEROtag = Label(self.STATESframe, text =  "  zero ", borderwidth=2, relief=GROOVE)
        self.ZEROtag.grid(row=0, column=1, padx=5, pady=1, sticky="wens")
        
        self.SIGNtag = Label(self.STATESframe, text =  "  sign ", borderwidth=2, relief=GROOVE)
        self.SIGNtag.grid(row=0, column=2, padx=5, pady=2, sticky="wens")

        self.CARRY = self.mkStringVar("0")
        self.ZERO  = self.mkStringVar("0")
        self.SIGN  = self.mkStringVar("0")
        
        self.CARRYlabel = Label(self.STATESframe, textvariable = self.CARRY, borderwidth=2, relief=GROOVE)
        self.CARRYlabel.grid(row=1, column=0, padx=5, pady=2, sticky="wens")
        
        self.ZEROlabel = Label(self.STATESframe, textvariable = self.ZERO, borderwidth=2, relief=GROOVE)
        self.ZEROlabel.grid(row=1, column=1, padx=5, pady=1, sticky="wens")
        
        self.SIGNlabel = Label(self.STATESframe, textvariable = self.SIGN, borderwidth=2, relief=GROOVE)
        self.SIGNlabel.grid(row=1, column=2, padx=5, pady=2, sticky="wens")
        
        self.STATESframe.pack(side=RIGHT, padx=8, pady=3)

# ==============================================================================
        
    def mkTagLabels(self, f):
        self.ALabel          = self.mkLabel(f, "A",             1, 0)
        self.BLabel          = self.mkLabel(f, "B",             2, 0)
        self.BLabel.config(bg="black", fg="yellow")
        self.CLabel          = self.mkLabel(f, "C",             3, 0)
        self.CLabel.config(bg="black", fg="yellow")
        self.DLabel          = self.mkLabel(f, "D",             4, 0)
        self.M1Label         = self.mkLabel(f, "M1",            5, 0)
        self.M2Label         = self.mkLabel(f, "M2",            6, 0)
        self.XLabel          = self.mkLabel(f, "X",             7, 0)
        self.YLabel          = self.mkLabel(f, "Y",             8, 0)
        self.J1Label         = self.mkLabel(f, "J1",            9, 0)
        self.J2Label         = self.mkLabel(f, "J2",           10, 0)
        self.PC1Label        = self.mkLabel(f, "PC1",          11, 0)
        self.PC2Label        = self.mkLabel(f, "PC2",          12, 0)
        self.Inc1Label       = self.mkLabel(f, "Inc1",         13, 0)
        self.Inc2Label       = self.mkLabel(f, "Inc2",         14, 0)
        self.IncUnit1Label   = self.mkLabel(f, "IncUnit1",     15, 0)
        self.IncUnit2Label   = self.mkLabel(f, "IncUnit2",     16, 0)
        self.InstLabel       = self.mkLabel(f, "Inst",         17, 0)
        self.addLabel        = self.mkLabel(f, "ADD",          18, 0)
        self.incLabel        = self.mkLabel(f, "INC",          19, 0)
        self.andLabel        = self.mkLabel(f, "AND",          20, 0)
        self.orLabel         = self.mkLabel(f, "OR",           21, 0)
        self.xorLabel        = self.mkLabel(f, "XOR",          22, 0)
        self.notLabel        = self.mkLabel(f, "NOT",          23, 0)
        self.shlLabel        = self.mkLabel(f, "SHL",          24, 0)
        self.clrLabel        = self.mkLabel(f, "CLR",          25, 0)

        self.functionTagLabelDictionary = { (0,0,0) : self.addLabel, \
                                 (0,0,1) : self.incLabel, \
                                 (0,1,0) : self.andLabel, \
                                 (0,1,1) : self.orLabel, \
                                 (1,0,0) : self.xorLabel, \
                                 (1,0,1) : self.notLabel, \
                                 (1,1,0) : self.shlLabel, \
                                 (1,1,1) : self.clrLabel \
                                 }

        for i in self.functionTagLabelDictionary.values():
            i.config(bg="black", fg="yellow")

# ==============================================================================

    def mkRegisterStringVars(self):
        self.FUNCTION   = [ self.mkStringVar("0") for unused_i in Range3 ]
        self.DATABUS    = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.Inst       = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.A          = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.B          = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.C          = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.D          = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.M1         = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.M2         = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.X          = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Y          = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.J1         = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.J2         = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.PC1        = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.PC2        = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Inc1       = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Inc2       = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.IncUnit1   = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.IncUnit2   = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Add        = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.Inc        = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.And        = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.Or         = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Xor        = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Not        = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Shl        = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Clr        = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.ADDRESSBUS = [ self.mkStringVar("0") for unused_i in Range16 ]
        self.MEMORY     = [ self.mkStringVar("0") for unused_i in Range8 ]

# ==============================================================================

    def setRegisterLabelColor(self, L, bc, fc="black"):
        for i in L:
            i.config(bg=bc, fg=fc)
    
    def mkRegisterLabels(self, f):
        self.Alabels        = self.mkLabelList(f, self.A,           1)
        self.setRegisterLabelColor(self.Alabels, "gray90")
        self.Blabels        = self.mkLabelList(f, self.B,           2)
        self.setRegisterLabelColor(self.Blabels, "black", "yellow")
        self.Clabels        = self.mkLabelList(f, self.C,           3)
        self.setRegisterLabelColor(self.Clabels, "black", "yellow")
        self.Dlabels        = self.mkLabelList(f, self.D,           4)
        self.setRegisterLabelColor(self.Dlabels, "gray90")
        self.M1labels       = self.mkLabelList(f, self.M1,          5)
        self.setRegisterLabelColor(self.M1labels, "gray90")
        self.M2labels       = self.mkLabelList(f, self.M2,          6)
        self.setRegisterLabelColor(self.M2labels, "gray90")
        self.Xlabels        = self.mkLabelList(f, self.X,           7)
        self.setRegisterLabelColor(self.Xlabels, "gray90")
        self.Ylabels        = self.mkLabelList(f, self.Y,           8)
        self.setRegisterLabelColor(self.Ylabels, "gray90")

        self.J1labels       = self.mkLabelList(f, self.J1,          9)
        self.J2labels       = self.mkLabelList(f, self.J2,         10)
        self.PC1labels      = self.mkLabelList(f, self.PC1,        11)
        self.PC2labels      = self.mkLabelList(f, self.PC2,        12)
        
        self.Inc1labels     = self.mkLabelList(f, self.Inc1,       13)
        self.setRegisterLabelColor(self.Inc1labels, "gray95")
        self.Inc2labels     = self.mkLabelList(f, self.Inc2,       14)
        self.setRegisterLabelColor(self.Inc2labels, "gray95")

        self.IncUnit1labels = self.mkLabelList(f, self.IncUnit1,   15)
        self.setRegisterLabelColor(self.IncUnit1labels, "gray95")
        self.IncUnit2labels = self.mkLabelList(f, self.IncUnit2,   16)
        self.setRegisterLabelColor(self.IncUnit2labels, "gray95")
        
        self.Instlabels     = self.mkLabelList(f, self.Inst,       17)
        
        self.addlabels      = self.mkLabelList(f, self.Add,        18)
        self.setRegisterLabelColor(self.addlabels, "black", "red")
        self.inclabels      = self.mkLabelList(f, self.Inc,        19)
        self.setRegisterLabelColor(self.inclabels, "black", "yellow")
        self.andlabels      = self.mkLabelList(f, self.And,        20)
        self.setRegisterLabelColor(self.andlabels, "black", "yellow")
        self.orlabels       = self.mkLabelList(f, self.Or,         21)
        self.setRegisterLabelColor(self.orlabels, "black", "yellow")
        self.xorlabels      = self.mkLabelList(f, self.Xor,        22)
        self.setRegisterLabelColor(self.xorlabels, "black", "yellow")
        self.notlabels      = self.mkLabelList(f, self.Not,        23)
        self.setRegisterLabelColor(self.notlabels, "black", "yellow")
        self.shllabels      = self.mkLabelList(f, self.Shl,        24)
        self.setRegisterLabelColor(self.shllabels, "black", "yellow")
        self.clrlabels      = self.mkLabelList(f, self.Clr,        25)
        self.setRegisterLabelColor(self.clrlabels, "black", "yellow")
        
        self.functionLabelsDictionary = { (0,0,0) : self.addlabels, \
                                 (0,0,1) : self.inclabels, \
                                 (0,1,0) : self.andlabels, \
                                 (0,1,1) : self.orlabels, \
                                 (1,0,0) : self.xorlabels, \
                                 (1,0,1) : self.notlabels, \
                                 (1,1,0) : self.shllabels, \
                                 (1,1,1) : self.clrlabels \
                                 }

# ===== Load & Select ==========================================================

    def mkLoad8Buttons(self, f):
        self.loadA    = self.mkButton(f, "load A",     1, 9, 1, 2)
        self.loadB    = self.mkButton(f, "load B",     2, 9, 1, 2)
        self.loadC    = self.mkButton(f, "load C",     3, 9, 1, 2)
        self.loadD    = self.mkButton(f, "load D",     4, 9, 1, 2)
        self.loadM1   = self.mkButton(f, "load M1",    5, 9, 1, 2)
        self.loadM2   = self.mkButton(f, "load M2",    6, 9, 1, 2)
        self.loadX    = self.mkButton(f, "load X",     7, 9)
        self.loadY    = self.mkButton(f, "load Y",     8, 9)
        self.loadJ1   = self.mkButton(f, "load J1",    9, 9, 1, 2)
        self.loadJ2   = self.mkButton(f, "load J2",   10, 9, 1, 2)

        self.loadInst = self.mkButton(f, "load Inst", 17, 9, 1, 2)


    def mkLoad16Buttons(self, f):
        self.loadXY  = self.mkButton(f, "load XY",    7, 10, 2, 1)
        self.loadPC  = self.mkButton(f, "load PC",   11,  9, 2, 2)
        self.loadINC = self.mkButton(f, "load INC",  13,  9, 2, 2)

    def mkSelect8Buttons(self, f):
        self.selectA    = self.mkButton(f, "select A",    1, 11, 1, 2)
        self.selectB    = self.mkButton(f, "select B",    2, 11, 1, 2)
        self.selectC    = self.mkButton(f, "select C",    3, 11, 1, 2)
        self.selectD    = self.mkButton(f, "select D",    4, 11, 1, 2)
        self.selectM1   = self.mkButton(f, "select M1",   5, 11)
        self.selectM2   = self.mkButton(f, "select M2",   6, 11)
        self.selectX    = self.mkButton(f, "select X",    7, 11)
        self.selectY    = self.mkButton(f, "select Y",    8, 11)

    def mkSelect16Buttons(self, f):
        self.selectM   = self.mkButton(f, "select M",    5, 12, 2, 1)
        self.selectXY  = self.mkButton(f, "select XY",   7, 12, 2, 1)
        self.selectJ   = self.mkButton(f, "select J",    9, 11, 2, 2)
        self.selectPC  = self.mkButton(f, "select PC",  11, 11, 2, 2)
        self.selectINC = self.mkButton(f, "select INC", 13, 11, 2, 2)

# ===== System Messages ========================================================

    def mkMessageArea(self, f):
        self.text = Text(f, height=36, width=64)
        self.text.configure(font=("Courier", 11, "bold"), bg="black", fg="green")
        self.scroll = Scrollbar(f, command = self.text.yview)        
        self.text.configure(yscrollcommand = self.scroll.set)
        
        self.text.pack(side=LEFT, padx=3, pady=2)
        self.scroll.pack(side=RIGHT, fill=Y, padx=3, pady=2)

    def addText(self, text):
        self.text.insert(END, text + "\n")
        self.text.yview(END)

# ===== Initialization =========================================================

    def __init__(self):
        Tk.__init__(self)
        
        self.title("Virtual Machine")
        self.config(bg="blue")

        self.registers = LabelFrame(self, bg="blue")
        self.registers.config(relief=GROOVE)
        self.registers.config(borderwidth=2)
        self.registers.config(text = "Virtual Machine: controls and states")
        self.registers.config(labelanchor = "nw")
        self.registers.pack(side = LEFT, fill=BOTH)
        
        self.mkRegisterStringVars()
        
        self.mkTagLabels(self.registers)
        self.mkDataBus(self.registers)
        
        self.mkRegisterLabels(self.registers)
        
        self.mkLoad8Buttons(self.registers)
        self.mkLoad16Buttons(self.registers)
        self.mkSelect8Buttons(self.registers)
        self.mkSelect16Buttons(self.registers)
        
        self.mkAddressBus(self.registers)
        
        self.mkALU(self.registers)
        self.mkMemory(self.registers)
        self.mkProgramLoad(self.registers)
        self.mkProgramControl(self.registers)
        self.mkHaltArea(self.registers)

        self.messages = LabelFrame(self, bg="blue")
        self.messages.config(relief=GROOVE)
        self.messages.config(borderwidth=2)
        self.messages.config(text = "Virtual Machine: system messages")
        self.messages.config(labelanchor = "nw")
        self.messages.pack(side = RIGHT, fill=BOTH)

        self.mkMessageArea(self.messages)
Пример #20
0
class Facade(Frame):
    """This is a Frame that contains group info, group order, apex and prime
    graph.
    """
    def __init__(self, parent, group, show_graph=True, graph_class=None, **kw):
        """
        Parameters:
            show_graph: whether to create and show graph instantly or provide a button to do that lately
            graph_factory: callable accepting one argument - the Group instance and returning Graph instance. Note that
                __str__ method of the callable is used in the UI.
        """
        Frame.__init__(self, parent, **kw)
        self._group = group
        #        self._show_apex = True
        self._show_graph = show_graph
        self._graph_class = graph_class
        self._init_variables()
        self._init_menu()
        self._init_components()

    @property
    def group(self):
        return self._group

    @property
    def apex_list_container(self):
        return self._apex_container

    @property
    def graph_canvas(self):
        return self._graph_canvas

    def _show_graph_canvas(self):
        self._show_graph_button.forget()
        # TODO: add different layouts and other options
        graph_class = self._graph_class
        self.graph = graph_class(self._group)
        self._graph_canvas = GraphCanvas(self._right_pane, SpringLayout(self.graph), caption=str(graph_class))
        self._graph_canvas.pack(expand=True, fill='both')

        self._graph_canvas.vertex_label_mode = self.getvar(
            name=self.winfo_name() + ".vertexlabelposition")

        self._iterations_plugin = IterationsPlugin()
        self._iterations_plugin.apply(self._graph_canvas)

        self.update_layout()

    def _init_components(self):
        self._panes = PanedWindow(self, orient='horizontal', sashrelief='raised')
        self._panes.pack(expand=True, fill='both')

        self._left_pane = Frame(self._panes, padx=2, pady=2)
        self._right_pane = Frame(self._panes)
        self._panes.add(self._left_pane, width=250)
        self._panes.add(self._right_pane)

        # group name
        group_name_pane = LabelFrame(self._left_pane, text="Group", padx=10, pady=5)
        group_name_pane.pack(fill='x')

        self._group_name = GroupNameLabel(group_name_pane, self._group)
        self._group_name.pack(expand=True, fill='both')

        # group order
        group_order_pane = LabelFrame(self._left_pane, text="Order", padx=10, pady=5)
        group_order_pane.pack(fill='x')

        self._group_order = IntegerContainer(group_order_pane, integer=self._group.order())
        self._group_order.pack(expand=True, fill='both')

        # apex
        self._apex_pane = LabelFrame(self._left_pane, text="Apex", padx=10, pady=5)
        self._apex_pane.pack(expand=True, fill='both')

        self._apex_container = ApexListContainer(self._apex_pane, apex=self._group.apex())
        self._apex_container.pack(expand=True, fill='both')

        # graph controls
        cocliques_frame = LabelFrame(self._left_pane, text="Cocliques", padx=10, pady=5)
        cocliques_frame.pack(fill='x')

        self._cocliques_button = Button(cocliques_frame, text="Calculate", command=self._show_cocliques)
        self._cocliques_button.pack(anchor='nw')

        self._cocliques_container = ListContainer(cocliques_frame)
        self._cocliques_list = Listbox(self._cocliques_container)
        self._cocliques_container.set_listbox(self._cocliques_list)

        # Button(graph_controls, text='Group equivalent vertices').pack(anchor='nw')

        # this is a button that show up instead of graph canvas if we uncheck 'Show graph' checkbox.
        self._show_graph_button = Button(self._right_pane, text='Show graph',
                                         command=self._show_graph_canvas)
        self._graph_canvas = None
        if self._show_graph:
            self._show_graph_canvas()
        else:
            self._show_graph_button.pack()

    def _init_variables(self):
        def set_default_var(self, name):
            """Sets widget-specific var with same value as root.
            """
            default_var = self.getvar(name)
            local_var_name = self.winfo_name() + "." + name
            self.setvar(local_var_name, default_var)
            return local_var_name

        local_name = set_default_var(self, "vertexlabelposition")
        tools.trace_variable(self, local_name, "w",
                             self._change_vertex_label_position)

    def _change_vertex_label_position(self, name, *arg):
        # override default value
        self.setvar("vertexlabelposition", self.getvar(name))
        if self._graph_canvas is not None:
            self._graph_canvas.vertex_label_mode = self.getvar(name)

    def _init_menu(self):
        """Init menu bar content.
        """
        toplevel = self.winfo_toplevel()
        if toplevel['menu']:
            self._menu = self.nametowidget(name=toplevel['menu'])
        else:
            self._menu = Menu(toplevel)
            toplevel['menu'] = self._menu

        graph_options = Menu(self._menu, tearoff=0)
        self._menu.add_cascade(label="Graph", menu=graph_options)
        self._menu_index = self._menu.index("end")

        vertex_label_position_menu = Menu(graph_options, tearoff=0)
        graph_options.add_cascade(label="Label position", menu=vertex_label_position_menu)

        menu_var = self.winfo_name() + ".vertexlabelposition"
        vertex_label_position_menu.add_radiobutton(variable=menu_var, label="Auto", value="auto")
        vertex_label_position_menu.add_radiobutton(variable=menu_var, label="Center", value="center")

        graph_options.add_command(label="Save graph...", command=self.call_graph_save_dialog)

        self.bind("<Destroy>", self.__destroy_menu)

    #noinspection PyUnusedLocal
    def __destroy_menu(self, event):
        try:
            self._menu.delete(self._menu_index)
        except TclError:
            pass

    def _show_cocliques(self):
        cocliques = self.graph.max_cocliques()

        def select_coclique(*_):
            index = next(iter(self._cocliques_list.curselection()), None)
            if index is not None:
                selected = cocliques[int(index)]
                pick_state = self._graph_canvas.picked_vertex_state
                pick_state.clear()
                for value in selected:
                    pick_state.pick(self._graph_canvas.get_vertex(value))

        self._cocliques_list.insert(0, *[', '.join(map(str, coclique)) for coclique in cocliques])
        self._cocliques_list.bind("<Double-Button-1>", select_coclique)

        self._cocliques_button.forget()
        self._cocliques_container.pack(expand=True, fill='both')

    def call_graph_save_dialog(self):
        file_name = tkFileDialog.asksaveasfilename(defaultextension='.ps',
                                                   filetypes=[('PostScript', '.ps')], parent=self.winfo_toplevel(),
                                                   title="Save graph as image")
        if file_name:
            with codecs.open(file_name, 'w', encoding='utf-8') as f:
                f.write(self._graph_canvas.postscript())

    def update_layout(self):
        try:
            self._iterations_plugin.iterate(50)
        except AttributeError:
            pass
Пример #21
0
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(asctime)s : %(levelname)-8s %(message)s')
logger.handlers[0].setFormatter(formatter)

root = Tk()
root.iconify()
root.wm_title("Correlator Monitor: %s Block" % options.block.capitalize())

plots = Frame(root)
plots.pack(side=LEFT, fill=BOTH, expand=1)

window = Frame(root)
window.pack(side=RIGHT, fill=BOTH, expand=1)

plotting = LabelFrame(window, text='Plotting')
plotting.pack(fill=BOTH, expand=1)

monitor = LabelFrame(window, text='Monitor')
monitor.pack(fill=BOTH, expand=1)

control = LabelFrame(window, text='Control')
control.pack(fill=BOTH, expand=1)

window.columnconfigure(0, weight=1)
window.columnconfigure(1, weight=1)
window.rowconfigure(0, weight=1)
window.rowconfigure(1, weight=1)
window.rowconfigure(2, weight=1)


server = sma.SubmillimeterArrayClient(server_host, server_port)
Пример #22
0
class view(Tk):
    def mkStringVar(self, s):
        R = StringVar()
        R.set(s)
        return R

    def mkLabel(self, f, T, r, c, rs=1, cs=1):
        if isinstance(T, type(StringVar())):
            R = Label(f, textvariable=T, relief=GROOVE, borderwidth=2)
        else:
            R = Label(f, text=T, relief=GROOVE, borderwidth=2)
        R.grid(row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens")
        return R

    def mkLabelList(self, f, SV, r):
        R = []
        for i in range(len(SV)):
            R.append(self.mkLabel(f, SV[i], r, i + 1))
        return R

    def mkButton(self, f, t, r, c, rs=1, cs=1):
        R = Button(f, text=t)
        R.grid(row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens")
        return R

# ===== HALT et cetera =========================================================

    def mkHaltArea(self, f):
        self.HALTframe = Frame(f)
        self.HALTframe.config(relief=GROOVE)
        self.HALTframe.config(borderwidth=2)

        self.HALTbutton = Button(self.HALTframe, text="HALT", width=10)
        self.READMEbutton = Button(self.HALTframe, text="README", width=10)

        self.HALTbutton.config(borderwidth=2, relief=GROOVE, fg="red")
        self.HALTbutton.config(command=self.quit)
        self.READMEbutton.config(borderwidth=2, relief=GROOVE, fg="red")

        self.HALTbutton.pack(side=LEFT, fill=BOTH)
        self.READMEbutton.pack(side=RIGHT, fill=BOTH)

        self.HALTframe.grid(row=0,
                            column=9,
                            rowspan=1,
                            columnspan=4,
                            sticky="wens")

# ==============================================================================

    def mkProgramControl(self, f):
        self.PROGRAMCONTROLframe = Frame(f)
        self.PROGRAMCONTROLframe.config(relief=GROOVE)
        self.PROGRAMCONTROLframe.config(borderwidth=2)

        self.runButton = Button(self.PROGRAMCONTROLframe, text="RUN", width=10)
        self.runButton.grid(row=0, column=0, sticky="wens", padx=29, pady=7)

        self.stepButton = Button(self.PROGRAMCONTROLframe,
                                 text="STEP",
                                 width=10)
        self.stepButton.grid(row=1, column=0, sticky="wens", padx=29, pady=5)

        self.noStepButton = Button(self.PROGRAMCONTROLframe,
                                   text="NOSTEP",
                                   width=10)
        self.noStepButton.grid(row=2, column=0, sticky="wens", padx=29, pady=7)

        self.PROGRAMCONTROLframe.grid(row=17,
                                      column=11,
                                      rowspan=6,
                                      columnspan=2,
                                      sticky="wens")

# ==============================================================================

    def getPGMfileName(self):
        options = {'filetypes': [('pgm files', '.pgm')]}
        f = askopenfilename(**options)
        g = f.split('/')
        self.filenameVar.set(g[len(g) - 1])
        return f

    def mkProgramLoad(self, f):
        self.PROGRAMLOADframe = Frame(f)
        self.PROGRAMLOADframe.config(relief=GROOVE)
        self.PROGRAMLOADframe.config(borderwidth=2)

        self.loadPGMbutton = Button(self.PROGRAMLOADframe, text="Load PGM")
        self.loadPGMbutton.config(width=14)
        self.loadPGMbutton.pack(side=LEFT, fill=BOTH, padx=20, pady=5)

        self.filenameVar = StringVar()
        self.filenameVar.set("*****.pgm")

        self.fileNameLabel = Label(self.PROGRAMLOADframe,
                                   textvariable=self.filenameVar)
        self.fileNameLabel.config(relief=GROOVE, borderwidth=2, width=17)
        self.fileNameLabel.pack(side=RIGHT, fill=BOTH, padx=20, pady=5)

        self.PROGRAMLOADframe.grid(row=15,
                                   column=9,
                                   rowspan=2,
                                   columnspan=4,
                                   sticky="wens")

# ==============================================================================

    def mkMemory(self, f):
        self.MEMORYframe = Frame(f)
        self.MEMORYframe.config(relief=GROOVE)
        self.MEMORYframe.config(borderwidth=2)

        E = Frame(self.MEMORYframe)

        self.CLEAR = self.mkButton(E, "ClearMem", 0, 0)
        self.RANDOM = self.mkButton(E, "RandomMem", 0, 1)
        self.READ = self.mkButton(E, "ReadMem", 1, 0)
        self.WRITE = self.mkButton(E, "WriteMem", 1, 1)
        self.BUSTOMEM = self.mkButton(E, "BusToMem", 2, 0, 1, 2)

        F = Frame(self.MEMORYframe)

        for i in Range8:
            L = Label(F, textvariable=self.MEMORY[i])
            L.config(relief=GROOVE,
                     borderwidth=2,
                     bg="black",
                     fg="yellow",
                     height=1)
            L.grid(row=0, column=i, sticky="wens", ipadx=5)

        E.pack(side=TOP)
        F.pack(side=BOTTOM)

        self.MEMORYframe.grid(row=18,
                              column=9,
                              rowspan=5,
                              columnspan=2,
                              sticky="wens")

# ==============================================================================

    def mkDataBus(self, f):
        self.DBframe = Frame(f)
        self.DBframe.config(relief=GROOVE)
        self.DBframe.config(borderwidth=2, bg="red")
        self.DBframe.grid(row=0, column=0, rowspan=1, \
                          columnspan=9, sticky="wens")

        self.databusLabel = Label(self.DBframe, text="Data\nBus", width=10)
        self.databusLabel.pack(side=LEFT)

        self.DATABUSbuttons = []
        for i in Range8:
            b = Button(self.DBframe, textvariable=self.DATABUS[i])
            b.pack(side=LEFT, fill=BOTH)
            self.DATABUSbuttons.append(b)

    def mkAddressBus(self, f):
        self.ABframe = Frame(f)
        self.ABframe.config(relief=GROOVE)
        self.ABframe.config(borderwidth=2, bg="red")
        self.ABframe.grid(row=26,
                          column=0,
                          rowspan=1,
                          columnspan=13,
                          sticky="wens")

        self.AddressBusLabel = Label(self.ABframe,
                                     text="Address\nBus",
                                     width=12)
        self.AddressBusLabel.pack(side=LEFT)

        self.ADDRESSBUSbuttons = []
        for i in Range16:
            b = Button(self.ABframe, textvariable=self.ADDRESSBUS[i])
            b.pack(side=LEFT, fill=BOTH, ipadx=2)
            self.ADDRESSBUSbuttons.append(b)

# ==============================================================================

    def mkALU(self, f):
        self.ALUframe = Frame(f)
        self.ALUframe.config(relief=GROOVE)
        self.ALUframe.config(borderwidth=2)

        self.mkFunctionChoice(self.ALUframe)
        self.mkStates(self.ALUframe)

        self.ALUframe.grid(row=23,
                           column=9,
                           rowspan=3,
                           columnspan=4,
                           sticky="wens")

    def mkFunctionChoice(self, f):
        self.FUNCTIONframe = Frame(f)
        self.FUNCTIONframe.config(relief=GROOVE)
        self.FUNCTIONframe.config(borderwidth=2)

        self.F0label = Label(self.FUNCTIONframe,
                             text="F0",
                             borderwidth=2,
                             relief=GROOVE)
        self.F0label.grid(row=0, column=0, sticky="wens", padx=5)

        self.F1label = Label(self.FUNCTIONframe,
                             text="F1",
                             borderwidth=2,
                             relief=GROOVE)
        self.F1label.grid(row=0, column=1, sticky="wens", padx=8)

        self.F2label = Label(self.FUNCTIONframe,
                             text="F2",
                             borderwidth=2,
                             relief=GROOVE)
        self.F2label.grid(row=0, column=2, sticky="wens", padx=5)

        self.FUNCTIONbuttons = []

        self.F0button = Button(self.FUNCTIONframe)
        self.F0button.config(textvariable=self.FUNCTION[0],
                             borderwidth=2,
                             relief=GROOVE)
        self.F1button = Button(self.FUNCTIONframe)
        self.F1button.config(textvariable=self.FUNCTION[1],
                             borderwidth=2,
                             relief=GROOVE)
        self.F2button = Button(self.FUNCTIONframe)
        self.F2button.config(textvariable=self.FUNCTION[2],
                             borderwidth=2,
                             relief=GROOVE)

        self.FUNCTIONbuttons.append(self.F0button)
        self.FUNCTIONbuttons.append(self.F1button)
        self.FUNCTIONbuttons.append(self.F2button)

        for i in Range3:
            self.FUNCTIONbuttons[i].grid(row=1,
                                         column=i,
                                         sticky="wens",
                                         padx=5)

        self.FUNCTIONframe.pack(side=LEFT, padx=8, pady=3)

    def mkStates(self, f):
        self.STATESframe = Frame(f)
        self.STATESframe.config(relief=GROOVE)
        self.STATESframe.config(borderwidth=2)

        self.CARRYtag = Label(self.STATESframe,
                              text=" carry ",
                              borderwidth=2,
                              relief=GROOVE)
        self.CARRYtag.grid(row=0, column=0, padx=5, pady=2, sticky="wens")

        self.ZEROtag = Label(self.STATESframe,
                             text="  zero ",
                             borderwidth=2,
                             relief=GROOVE)
        self.ZEROtag.grid(row=0, column=1, padx=5, pady=1, sticky="wens")

        self.SIGNtag = Label(self.STATESframe,
                             text="  sign ",
                             borderwidth=2,
                             relief=GROOVE)
        self.SIGNtag.grid(row=0, column=2, padx=5, pady=2, sticky="wens")

        self.CARRY = self.mkStringVar("0")
        self.ZERO = self.mkStringVar("0")
        self.SIGN = self.mkStringVar("0")

        self.CARRYlabel = Label(self.STATESframe,
                                textvariable=self.CARRY,
                                borderwidth=2,
                                relief=GROOVE)
        self.CARRYlabel.grid(row=1, column=0, padx=5, pady=2, sticky="wens")

        self.ZEROlabel = Label(self.STATESframe,
                               textvariable=self.ZERO,
                               borderwidth=2,
                               relief=GROOVE)
        self.ZEROlabel.grid(row=1, column=1, padx=5, pady=1, sticky="wens")

        self.SIGNlabel = Label(self.STATESframe,
                               textvariable=self.SIGN,
                               borderwidth=2,
                               relief=GROOVE)
        self.SIGNlabel.grid(row=1, column=2, padx=5, pady=2, sticky="wens")

        self.STATESframe.pack(side=RIGHT, padx=8, pady=3)

# ==============================================================================

    def mkTagLabels(self, f):
        self.ALabel = self.mkLabel(f, "A", 1, 0)
        self.BLabel = self.mkLabel(f, "B", 2, 0)
        self.BLabel.config(bg="black", fg="yellow")
        self.CLabel = self.mkLabel(f, "C", 3, 0)
        self.CLabel.config(bg="black", fg="yellow")
        self.DLabel = self.mkLabel(f, "D", 4, 0)
        self.M1Label = self.mkLabel(f, "M1", 5, 0)
        self.M2Label = self.mkLabel(f, "M2", 6, 0)
        self.XLabel = self.mkLabel(f, "X", 7, 0)
        self.YLabel = self.mkLabel(f, "Y", 8, 0)
        self.J1Label = self.mkLabel(f, "J1", 9, 0)
        self.J2Label = self.mkLabel(f, "J2", 10, 0)
        self.PC1Label = self.mkLabel(f, "PC1", 11, 0)
        self.PC2Label = self.mkLabel(f, "PC2", 12, 0)
        self.Inc1Label = self.mkLabel(f, "Inc1", 13, 0)
        self.Inc2Label = self.mkLabel(f, "Inc2", 14, 0)
        self.IncUnit1Label = self.mkLabel(f, "IncUnit1", 15, 0)
        self.IncUnit2Label = self.mkLabel(f, "IncUnit2", 16, 0)
        self.InstLabel = self.mkLabel(f, "Inst", 17, 0)
        self.addLabel = self.mkLabel(f, "ADD", 18, 0)
        self.incLabel = self.mkLabel(f, "INC", 19, 0)
        self.andLabel = self.mkLabel(f, "AND", 20, 0)
        self.orLabel = self.mkLabel(f, "OR", 21, 0)
        self.xorLabel = self.mkLabel(f, "XOR", 22, 0)
        self.notLabel = self.mkLabel(f, "NOT", 23, 0)
        self.shlLabel = self.mkLabel(f, "SHL", 24, 0)
        self.clrLabel = self.mkLabel(f, "CLR", 25, 0)

        self.functionTagLabelDictionary = { (0,0,0) : self.addLabel, \
                                 (0,0,1) : self.incLabel, \
                                 (0,1,0) : self.andLabel, \
                                 (0,1,1) : self.orLabel, \
                                 (1,0,0) : self.xorLabel, \
                                 (1,0,1) : self.notLabel, \
                                 (1,1,0) : self.shlLabel, \
                                 (1,1,1) : self.clrLabel \
                                 }

        for i in self.functionTagLabelDictionary.values():
            i.config(bg="black", fg="yellow")

# ==============================================================================

    def mkRegisterStringVars(self):
        self.FUNCTION = [self.mkStringVar("0") for unused_i in Range3]
        self.DATABUS = [self.mkStringVar("0") for unused_i in Range8]
        self.Inst = [self.mkStringVar("0") for unused_i in Range8]
        self.A = [self.mkStringVar("0") for unused_i in Range8]
        self.B = [self.mkStringVar("0") for unused_i in Range8]
        self.C = [self.mkStringVar("0") for unused_i in Range8]
        self.D = [self.mkStringVar("0") for unused_i in Range8]
        self.M1 = [self.mkStringVar("0") for unused_i in Range8]
        self.M2 = [self.mkStringVar("0") for unused_i in Range8]
        self.X = [self.mkStringVar("0") for unused_i in Range8]
        self.Y = [self.mkStringVar("0") for unused_i in Range8]
        self.J1 = [self.mkStringVar("0") for unused_i in Range8]
        self.J2 = [self.mkStringVar("0") for unused_i in Range8]
        self.PC1 = [self.mkStringVar("0") for unused_i in Range8]
        self.PC2 = [self.mkStringVar("0") for unused_i in Range8]
        self.Inc1 = [self.mkStringVar("0") for unused_i in Range8]
        self.Inc2 = [self.mkStringVar("0") for unused_i in Range8]
        self.IncUnit1 = [self.mkStringVar("0") for unused_i in Range8]
        self.IncUnit2 = [self.mkStringVar("0") for unused_i in Range8]
        self.Add = [self.mkStringVar("0") for unused_i in Range8]
        self.Inc = [self.mkStringVar("0") for unused_i in Range8]
        self.And = [self.mkStringVar("0") for unused_i in Range8]
        self.Or = [self.mkStringVar("0") for unused_i in Range8]
        self.Xor = [self.mkStringVar("0") for unused_i in Range8]
        self.Not = [self.mkStringVar("0") for unused_i in Range8]
        self.Shl = [self.mkStringVar("0") for unused_i in Range8]
        self.Clr = [self.mkStringVar("0") for unused_i in Range8]
        self.ADDRESSBUS = [self.mkStringVar("0") for unused_i in Range16]
        self.MEMORY = [self.mkStringVar("0") for unused_i in Range8]

# ==============================================================================

    def setRegisterLabelColor(self, L, bc, fc="black"):
        for i in L:
            i.config(bg=bc, fg=fc)

    def mkRegisterLabels(self, f):
        self.Alabels = self.mkLabelList(f, self.A, 1)
        self.setRegisterLabelColor(self.Alabels, "gray90")
        self.Blabels = self.mkLabelList(f, self.B, 2)
        self.setRegisterLabelColor(self.Blabels, "black", "yellow")
        self.Clabels = self.mkLabelList(f, self.C, 3)
        self.setRegisterLabelColor(self.Clabels, "black", "yellow")
        self.Dlabels = self.mkLabelList(f, self.D, 4)
        self.setRegisterLabelColor(self.Dlabels, "gray90")
        self.M1labels = self.mkLabelList(f, self.M1, 5)
        self.setRegisterLabelColor(self.M1labels, "gray90")
        self.M2labels = self.mkLabelList(f, self.M2, 6)
        self.setRegisterLabelColor(self.M2labels, "gray90")
        self.Xlabels = self.mkLabelList(f, self.X, 7)
        self.setRegisterLabelColor(self.Xlabels, "gray90")
        self.Ylabels = self.mkLabelList(f, self.Y, 8)
        self.setRegisterLabelColor(self.Ylabels, "gray90")

        self.J1labels = self.mkLabelList(f, self.J1, 9)
        self.J2labels = self.mkLabelList(f, self.J2, 10)
        self.PC1labels = self.mkLabelList(f, self.PC1, 11)
        self.PC2labels = self.mkLabelList(f, self.PC2, 12)

        self.Inc1labels = self.mkLabelList(f, self.Inc1, 13)
        self.setRegisterLabelColor(self.Inc1labels, "gray95")
        self.Inc2labels = self.mkLabelList(f, self.Inc2, 14)
        self.setRegisterLabelColor(self.Inc2labels, "gray95")

        self.IncUnit1labels = self.mkLabelList(f, self.IncUnit1, 15)
        self.setRegisterLabelColor(self.IncUnit1labels, "gray95")
        self.IncUnit2labels = self.mkLabelList(f, self.IncUnit2, 16)
        self.setRegisterLabelColor(self.IncUnit2labels, "gray95")

        self.Instlabels = self.mkLabelList(f, self.Inst, 17)

        self.addlabels = self.mkLabelList(f, self.Add, 18)
        self.setRegisterLabelColor(self.addlabels, "black", "red")
        self.inclabels = self.mkLabelList(f, self.Inc, 19)
        self.setRegisterLabelColor(self.inclabels, "black", "yellow")
        self.andlabels = self.mkLabelList(f, self.And, 20)
        self.setRegisterLabelColor(self.andlabels, "black", "yellow")
        self.orlabels = self.mkLabelList(f, self.Or, 21)
        self.setRegisterLabelColor(self.orlabels, "black", "yellow")
        self.xorlabels = self.mkLabelList(f, self.Xor, 22)
        self.setRegisterLabelColor(self.xorlabels, "black", "yellow")
        self.notlabels = self.mkLabelList(f, self.Not, 23)
        self.setRegisterLabelColor(self.notlabels, "black", "yellow")
        self.shllabels = self.mkLabelList(f, self.Shl, 24)
        self.setRegisterLabelColor(self.shllabels, "black", "yellow")
        self.clrlabels = self.mkLabelList(f, self.Clr, 25)
        self.setRegisterLabelColor(self.clrlabels, "black", "yellow")

        self.functionLabelsDictionary = { (0,0,0) : self.addlabels, \
                                 (0,0,1) : self.inclabels, \
                                 (0,1,0) : self.andlabels, \
                                 (0,1,1) : self.orlabels, \
                                 (1,0,0) : self.xorlabels, \
                                 (1,0,1) : self.notlabels, \
                                 (1,1,0) : self.shllabels, \
                                 (1,1,1) : self.clrlabels \
                                 }

# ===== Load & Select ==========================================================

    def mkLoad8Buttons(self, f):
        self.loadA = self.mkButton(f, "load A", 1, 9, 1, 2)
        self.loadB = self.mkButton(f, "load B", 2, 9, 1, 2)
        self.loadC = self.mkButton(f, "load C", 3, 9, 1, 2)
        self.loadD = self.mkButton(f, "load D", 4, 9, 1, 2)
        self.loadM1 = self.mkButton(f, "load M1", 5, 9, 1, 2)
        self.loadM2 = self.mkButton(f, "load M2", 6, 9, 1, 2)
        self.loadX = self.mkButton(f, "load X", 7, 9)
        self.loadY = self.mkButton(f, "load Y", 8, 9)
        self.loadJ1 = self.mkButton(f, "load J1", 9, 9, 1, 2)
        self.loadJ2 = self.mkButton(f, "load J2", 10, 9, 1, 2)

        self.loadInst = self.mkButton(f, "load Inst", 17, 9, 1, 2)

    def mkLoad16Buttons(self, f):
        self.loadXY = self.mkButton(f, "load XY", 7, 10, 2, 1)
        self.loadPC = self.mkButton(f, "load PC", 11, 9, 2, 2)
        self.loadINC = self.mkButton(f, "load INC", 13, 9, 2, 2)

    def mkSelect8Buttons(self, f):
        self.selectA = self.mkButton(f, "select A", 1, 11, 1, 2)
        self.selectB = self.mkButton(f, "select B", 2, 11, 1, 2)
        self.selectC = self.mkButton(f, "select C", 3, 11, 1, 2)
        self.selectD = self.mkButton(f, "select D", 4, 11, 1, 2)
        self.selectM1 = self.mkButton(f, "select M1", 5, 11)
        self.selectM2 = self.mkButton(f, "select M2", 6, 11)
        self.selectX = self.mkButton(f, "select X", 7, 11)
        self.selectY = self.mkButton(f, "select Y", 8, 11)

    def mkSelect16Buttons(self, f):
        self.selectM = self.mkButton(f, "select M", 5, 12, 2, 1)
        self.selectXY = self.mkButton(f, "select XY", 7, 12, 2, 1)
        self.selectJ = self.mkButton(f, "select J", 9, 11, 2, 2)
        self.selectPC = self.mkButton(f, "select PC", 11, 11, 2, 2)
        self.selectINC = self.mkButton(f, "select INC", 13, 11, 2, 2)

# ===== System Messages ========================================================

    def mkMessageArea(self, f):
        self.text = Text(f, height=36, width=64)
        self.text.configure(font=("Courier", 11, "bold"),
                            bg="black",
                            fg="green")
        self.scroll = Scrollbar(f, command=self.text.yview)
        self.text.configure(yscrollcommand=self.scroll.set)

        self.text.pack(side=LEFT, padx=3, pady=2)
        self.scroll.pack(side=RIGHT, fill=Y, padx=3, pady=2)

    def addText(self, text):
        self.text.insert(END, text + "\n")
        self.text.yview(END)

# ===== Initialization =========================================================

    def __init__(self):
        Tk.__init__(self)

        self.title("Virtual Machine")
        self.config(bg="blue")

        self.registers = LabelFrame(self, bg="blue")
        self.registers.config(relief=GROOVE)
        self.registers.config(borderwidth=2)
        self.registers.config(text="Virtual Machine: controls and states")
        self.registers.config(labelanchor="nw")
        self.registers.pack(side=LEFT, fill=BOTH)

        self.mkRegisterStringVars()

        self.mkTagLabels(self.registers)
        self.mkDataBus(self.registers)

        self.mkRegisterLabels(self.registers)

        self.mkLoad8Buttons(self.registers)
        self.mkLoad16Buttons(self.registers)
        self.mkSelect8Buttons(self.registers)
        self.mkSelect16Buttons(self.registers)

        self.mkAddressBus(self.registers)

        self.mkALU(self.registers)
        self.mkMemory(self.registers)
        self.mkProgramLoad(self.registers)
        self.mkProgramControl(self.registers)
        self.mkHaltArea(self.registers)

        self.messages = LabelFrame(self, bg="blue")
        self.messages.config(relief=GROOVE)
        self.messages.config(borderwidth=2)
        self.messages.config(text="Virtual Machine: system messages")
        self.messages.config(labelanchor="nw")
        self.messages.pack(side=RIGHT, fill=BOTH)

        self.mkMessageArea(self.messages)
class tkLicenseGen:

	def __init__(self, master):
		master.title('Univention Lizenz Generator')
		self.master = master
		self.logoframe = Frame(self.master, bg='red')
		self.logoframe.pack(side=TOP, fill=X, expand=YES)
		self.lftopframes = LabelFrame(self.master)
		self.lftopframes.pack(side=TOP, fill=X, expand=YES)
		self.lframe = Frame(self.lftopframes)
		self.rframe = Frame(self.lftopframes)
		self.lframe.pack(side=LEFT, fill=X, expand=YES)
		self.rframe.pack(side=RIGHT, fill=X, expand=YES)

		self.bframe = Frame(self.master)
		self.bframe.pack(fill=X)

		self.kname = StringVar()
		self.kname.set('test')

		self.chkevar = IntVar()
		self.chkevar.set('1')
		self.chkivar = IntVar()
		self.chkovar = IntVar()
		self.chkdvar = IntVar()

		self.exday = StringVar()
		self.exmonth = StringVar()
		self.exyear = StringVar()
		self.getdate()  # set date to localdate (month+3)

		try:
			self.logo = PhotoImage(file='/var/www/head_logo.gif')
		except TclError:  # fall back to 64x64 white
			self.logo = PhotoImage(data='R0lGODdhQABAAIAAAP///wAAACwAAAAAQABAAAACRYSPqcvtD6OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNarfcrhdQAAA7')
		# self.logo.pack() #muss man nicht packen??!!
		self.logolabel = Label(self.logoframe, image=self.logo, bg='#CC3300')
		self.logolabel.pack(side=LEFT, fill=X, expand=YES)

		self.lfname = LabelFrame(self.lframe, font=("Helvetica", 11), text='Kundenname:')
		self.lfname.pack(fill=X)
		self.ekname = Entry(self.lfname, textvariable=self.kname, width=30)
		self.ekname.pack(side=LEFT)

		self.lfdate = LabelFrame(self.lframe, font=("Helvetica", 11), text='Ablaufdatum (TT/MM/JJ):')
		self.lfdate.pack(fill=X)
		self.eexd = Entry(self.lfdate, textvariable=self.exday, width=2)
		self.eexd.pack(side=LEFT)
		self.eexm = Entry(self.lfdate, textvariable=self.exmonth, width=2)
		self.eexm.pack(side=LEFT)
		self.eexy = Entry(self.lfdate, textvariable=self.exyear, width=2)
		self.eexy.pack(side=LEFT)
		self.chkdate = Checkbutton(self.lfdate, text='Unbeschränkt', variable=self.chkdvar)
		self.chkdate.pack(side=RIGHT)

		self.lfchke = LabelFrame(self.lframe, font=("Helvetica", 11), text='Evaluationslizenz:')
		self.lfchke.pack(fill=X)
		self.chke = Checkbutton(self.lfchke, variable=self.chkevar)
		self.chke.pack(side=LEFT)

		self.lfchki = LabelFrame(self.lframe, font=("Helvetica", 11), text='Interne Lizenz:')
		self.lfchki.pack(fill=X)
		self.chki = Checkbutton(self.lfchki, variable=self.chkivar)
		self.chki.pack(side=LEFT)

		self.lfchko = LabelFrame(self.lframe, font=("Helvetica", 11), text='Altes Lizenzformat (vor 1.2-3):')
		self.lfchko.pack(fill=X)
		self.chko = Checkbutton(self.lfchko, variable=self.chkovar, command=self.makegrey)
		self.chko.pack(side=LEFT)

		self.kdn = StringVar()
		self.kdn.set('dc=univention,dc=de')
		self.lfdn = LabelFrame(self.rframe, font=("Helvetica", 11), text='Kunde DN:')
		self.lfdn.pack(fill=X)
		self.ekdn = Entry(self.lfdn, textvariable=self.kdn, width=30)
		self.ekdn.pack(side=LEFT)

		self.kmaxacc = IntVar()
		self.kmaxacc.set('999')
		self.kmaxgacc = IntVar()
		self.kmaxgacc.set('999')
		self.kmaxcli = IntVar()
		self.kmaxcli.set('999')
		self.kmaxdesk = IntVar()
		self.kmaxdesk.set('999')

		self.chkmaxaccvar = IntVar()
		self.chkmaxaccvar.set('0')
		self.chkmaxgaccvar = IntVar()
		self.chkmaxgaccvar.set('0')
		self.chkmaxclivar = IntVar()
		self.chkmaxclivar.set('0')
		self.chkmaxdeskvar = IntVar()
		self.chkmaxdeskvar.set('0')

		self.lfmaxacc = LabelFrame(self.rframe, font=("Helvetica", 11), text='Max. Accounts:')
		self.lfmaxacc.pack(fill=X)
		self.lfmaxgacc = LabelFrame(self.rframe, font=("Helvetica", 11), text='Max. Groupware Accounts:')
		self.lfmaxgacc.pack(fill=X)
		self.lfmaxcli = LabelFrame(self.rframe, font=("Helvetica", 11), text='Max. Clients:')
		self.lfmaxcli.pack(fill=X)
		self.lfmaxdesk = LabelFrame(self.rframe, font=("Helvetica", 11), text='Max. Univention Desktops:')
		self.lfmaxdesk.pack(fill=X)

		self.emaxacc = Entry(self.lfmaxacc, textvariable=self.kmaxacc)
		self.emaxacc.pack(side=LEFT)
		self.chkmaxacc = Checkbutton(self.lfmaxacc, text='Unbeschränkt', variable=self.chkmaxaccvar)
		self.chkmaxacc.pack(side=LEFT)

		self.emaxgacc = Entry(self.lfmaxgacc, textvariable=self.kmaxgacc)
		self.emaxgacc.pack(side=LEFT)
		self.chkmaxgacc = Checkbutton(self.lfmaxgacc, text='Unbeschränkt', variable=self.chkmaxgaccvar)
		self.chkmaxgacc.pack(side=LEFT)

		self.emaxcli = Entry(self.lfmaxcli, textvariable=self.kmaxcli)
		self.emaxcli.pack(side=LEFT)
		self.chkmaxcli = Checkbutton(self.lfmaxcli, text='Unbeschränkt', variable=self.chkmaxclivar)
		self.chkmaxcli.pack(side=LEFT)

		self.emaxdesk = Entry(self.lfmaxdesk, textvariable=self.kmaxdesk)
		self.emaxdesk.pack(side=LEFT)
		self.chkmaxdesk = Checkbutton(self.lfmaxdesk, text='Unbeschränkt', variable=self.chkmaxdeskvar)
		self.chkmaxdesk.pack(side=LEFT)

		self.bexit = Button(self.bframe, text='Beenden', command=self.quit)
		self.bexit.pack(side=RIGHT)

		self.bsave = Button(self.bframe, text='Lizenz erzeugen', command=self.generate)
		self.bsave.pack(side=RIGHT)

	def generate(self):
		makelicense = ['univention_make_license']
		path = tkFileDialog.asksaveasfilename(initialdir='~', initialfile=self.kname.get() + '-license', defaultextension='.ldif')
		# print path
		if path:
			if self.chkevar.get():
				makelicense.append('-e')
			if self.chkivar.get():
				makelicense.append('-i')
			makelicense.append('-f')
			makelicense.append(path)

			if not self.chkdvar.get():
				makelicense.append('-d')
				makelicense.append("%s/%s/%s" % (self.exmonth.get(), self.exday.get(), self.exyear.get()))

			if not self.chkovar.get():
				if not self.chkmaxaccvar.get():
					makelicense.append('-a')
					makelicense.append('%d' % self.kmaxacc.get())
				else:
					makelicense.append('-a')
					makelicense.append('unlimited')
				if not self.chkmaxgaccvar.get():
					makelicense.append('-g')
					makelicense.append('%d' % self.kmaxgacc.get())
				else:
					makelicense.append('-g')
					makelicense.append('unlimited')
				if not self.chkmaxclivar.get():
					makelicense.append('-c')
					makelicense.append('%d' % self.kmaxcli.get())
				else:
					makelicense.append('-c')
					makelicense.append('unlimited')
				if not self.chkmaxdeskvar.get():
					makelicense.append('-u')
					makelicense.append('%d' % self.kmaxdesk.get())
				else:
					makelicense.append('-u')
					makelicense.append('unlimited')
			else:
				makelicense.append('-o')

			makelicense.append(self.kname.get())
			makelicense.append(self.kdn.get())
			os.chdir('/home/groups/99_license/')
			p = subprocess.Popen(makelicense, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
			stdout, stderr = p.communicate()
			if p.returncode == 0:
				showinfo('Lizenz Erstellt!', 'Die Lizenz für %s wurde erfolgreich erstellt!' % self.kname.get())
			elif p.returncode == 257:
				showerror('Fehler', 'Errorcode: "%s"\nEvtl. sind Sie nicht in dem Sudoers File!' % p.returncode)
			elif p.returncode == 8704:
				showerror('Fehler', 'Errorcode: "%s"\nmake_license.sh meldet: "invalid DN"!' % p.returncode)
			else:
				print >>sys.stderr, '%r\n%s' % (makelicense, stdout)
				showerror('Fehler', 'Errorcode: "%s"\nEin unbekannter Fehler ist aufgetreten!\nBitte senden Sie eine komplette Fehlerbeschreibung an "*****@*****.**"' % p.returncode)
			# print makelicense
			# print '-->ErrorCode: %d'%i[0]
			# print i[1]

	def getdate(self):
		localtime = time.strftime('%d %m %y')
		split = localtime.split(' ')
		day = int(split[0])
		month = int(split[1])
		year = int(split[2])
		month += 3
		if month > 12:
			month = month - 12
			year += 1
		if day < 10:
			day = '0' + str(day)
		if month < 10:
			month = '0' + str(month)
		if year < 10:
			year = '0' + str(year)
		self.exday.set(day)
		self.exmonth.set(month)
		self.exyear.set(year)

	def makegrey(self):
		pass

        def quit(self, event=None):
                self.master.quit()
Пример #24
0
	def __init__(self, app, printer, settings, logger, *arg):
		self.app = app
		self.printer = printer
		self.settings = settings
		self.logger = logger
		self.afterID = None
		
		self.selection = None
		
		if not self.app.printing:
			self.logger.logMsg("Report only available while printing")
			return

		Toplevel.__init__(self, app, *arg)
		self.title("Layer by Layer Timing")
		self.protocol("WM_DELETE_WINDOW", self.doCancel)

		fUL = Frame(self)
		fUL.grid(row=1, column=1, rowspan=2, padx=10)

		l = Label(fUL, text="Choose layer:")
		l.pack()
		
		lbf = Frame(fUL)
		lbf.pack()
				
		self.lbLayers = Listbox(lbf)
		self.lbLayers.bind("<ButtonRelease-1>", self.clickLayers)

		self.sb = Scrollbar(lbf, orient=VERTICAL)

		self.sb.config(command=self.lbLayers.yview)
		self.lbLayers.config(yscrollcommand=self.sb.set)	

		self.sb.pack(side=RIGHT, fill=Y)
		self.lbLayers.pack(side=LEFT, fill=BOTH, expand=1)
		
		rbf = LabelFrame(fUL, text="Time Format")
		rbf.pack()
		
		self.rbvTimeFmt = StringVar()
		self.rbvTimeFmt.set(TIME_WALL)
		rb = Radiobutton(rbf, text="Wall time", variable=self.rbvTimeFmt, value=TIME_WALL, command=self.doTimeFormat)
		rb.pack(anchor=W)
		rb = Radiobutton(rbf, text="From start", variable=self.rbvTimeFmt, value=TIME_START, command=self.doTimeFormat)
		rb.pack(anchor=W)
		rb = Radiobutton(rbf, text="From now", variable=self.rbvTimeFmt, value=TIME_NOW, command=self.doTimeFormat)
		rb.pack(anchor=W)

		fUR = Frame(self)
		fUR.grid(row=1, column=2, rowspan=2, padx=10)
		
		row = 1
		lf = LabelFrame(fUR, text="Print Times: ")
		lf.grid(row=row, column=1)
		
		l = Label(lf, text="Start: ", width=12, justify=RIGHT)
		l.grid(row=1, column=1, padx=10, sticky=E)
		
		self.timePStart = Label(lf, text="", anchor=W, justify=LEFT)
		self.timePStart.grid(row=1, column=3, padx=10)
		
		l = Label(lf, text="Elapsed: ", width=12, justify=RIGHT)
		l.grid(row=2, column=1, padx=10, sticky=E)
		
		self.timeElapsed = Label(lf, text="", anchor=W, justify=LEFT)
		self.timeElapsed.grid(row=2, column=3, padx=10)
		
		l = Label(lf, text="Current: ", width=12, justify=RIGHT)
		l.grid(row=3, column=1, padx=10, sticky=E)
		
		self.timeNow = Label(lf, text="", anchor=W, justify=LEFT)
		self.timeNow.grid(row=3, column=3, padx=10)
		
		row += 1
		
		lf = LabelFrame(fUR, text="Layer Start Time: ")
		lf.grid(row=row, column=1)
		
		l = Label(lf, text="original: ", width=12, justify=RIGHT)
		l.grid(row=1, column=1, padx=10, sticky=E)
		
		self.timeOStart = Label(lf, text="", anchor=W, justify=LEFT)
		self.timeOStart.grid(row=1, column=2, padx=10)
		
		l = Label(lf, text="revised: ", width=12, justify=RIGHT)
		l.grid(row=2, column=1, padx=10, sticky=E)
		
		self.timeRStart = Label(lf, text="", anchor=W, justify=LEFT)
		self.timeRStart.grid(row=2, column=2, padx=10)
		
		row += 1
		
		lf = LabelFrame(fUR, text="Time in Layer: ")
		lf.grid(row=row, column=1)
		
		l = Label(lf, text="original: ", width=12, justify=RIGHT)
		l.grid(row=1, column=2, padx=10, sticky=E)
		
		self.timeOLayer = Label(lf, text="", anchor=W, justify=LEFT)
		self.timeOLayer.grid(row=1, column=3, padx=10)
		
		l = Label(lf, text="revised: ", width=12, justify=RIGHT)
		l.grid(row=2, column=2, padx=10, sticky=E)
		
		self.timeRLayer = Label(lf, text="", anchor=W, justify=LEFT)
		self.timeRLayer.grid(row=2, column=3, padx=10)
		
		row += 1
		
		lf = LabelFrame(fUR, text="Layer Finish Time: ")
		lf.grid(row=row, column=1)
		
		l = Label(lf, text="original: ", width=12, justify=RIGHT)
		l.grid(row=1, column=2, padx=10, sticky=E)
		
		self.timeOFinish = Label(lf, text="", anchor=W, justify=LEFT)
		self.timeOFinish.grid(row=1, column=3, padx=10)
		
		l = Label(lf, text="revised: ", width=12, justify=RIGHT)
		l.grid(row=2, column=2, padx=10, sticky=E)
		
		self.timeRFinish = Label(lf, text="", anchor=W, justify=LEFT)
		self.timeRFinish.grid(row=2, column=3, padx=10)
		
		self.ticker()
Пример #25
0
    def initUI(self):

        self.parent.title("IAF CALC 0.01")
        self.pack(fill=BOTH, expand=1)

        self.configure(background='white')

        frameTOP = Frame(self)
        frameTOP.config(bg="white")
        frameTOP.pack(side=TOP)

        frameFILES = Frame(frameTOP)
        frameFILES.pack(side=LEFT, padx=10)

        # --- BUTTON FOR FILE 1 --- #
        frameF1 = LabelFrame(frameFILES,
                             text="Eyes open file:",
                             relief=FLAT,
                             borderwidth=1,
                             background="white")
        frameF1.pack(fill=X, expand=1)
        self.nameF1 = Entry(frameF1, width=50)
        self.nameF1.config(bg="lightgray")
        self.nameF1.pack(side=LEFT)
        self.nameF1.delete(0, END)
        self.nameF1.insert(0, "")
        self.buttonLoadFile1 = Button(frameF1,
                                      text="...",
                                      command=self.askOpenFile1)
        self.buttonLoadFile1.pack(side=LEFT, padx=5, pady=5)
        # ----------------------- #

        # --- BUTTON FOR FILE 2 --- #
        frameF2 = LabelFrame(frameFILES,
                             text="Eyes closed file:",
                             relief=FLAT,
                             borderwidth=1,
                             background="white")
        frameF2.pack(fill=X, expand=1)
        self.nameF2 = Entry(frameF2, width=50)
        self.nameF2.config(bg="lightgray")
        self.nameF2.pack(side=LEFT)
        self.nameF2.delete(0, END)
        self.nameF2.insert(0, "")
        self.buttonLoadFile2 = Button(frameF2,
                                      text="...",
                                      command=self.askOpenFile2)
        self.buttonLoadFile2.pack(side=LEFT, padx=5, pady=5)
        # ----------------------- #

        # --- BUTTON FOR FILE OUTPUT --- #
        frameO = LabelFrame(frameFILES,
                            text="Output directory:",
                            relief=FLAT,
                            borderwidth=1,
                            background="white")
        frameO.pack(fill=X, expand=1)
        self.nameO = Entry(frameO, width=50)
        self.nameO.config(bg="lightgray")
        self.nameO.pack(side=LEFT)
        self.nameO.delete(0, END)
        self.nameO.insert(0, "")
        self.buttonSelectOutput = Button(frameO,
                                         text="...",
                                         command=self.askOutputDirectory)
        self.buttonSelectOutput.pack(side=LEFT, padx=5, pady=5)
        # -------------------------------#
        # self.pack()
        # self.pack(fill=Y, expand=1)

        # ---------- PSD PARAMETER SELECTION ---------- #
        framePARAM = Frame(frameTOP)
        framePARAM.config(bg="white")
        framePARAM.pack(side=LEFT, fill=X)

        frame = LabelFrame(framePARAM,
                           text="PSD Parameters",
                           relief=RIDGE,
                           borderwidth=1,
                           background="white")
        frame.pack(fill=BOTH, expand=1, side=TOP)

        wFs = Label(frame, text="Fs:", bg="white")
        wFs.pack(side=LEFT)
        self.inputFs = Entry(frame, width=5)
        self.inputFs.pack(side=LEFT, padx=5)
        self.inputFs.delete(0, END)
        self.inputFs.insert(0, "500")

        wWS = Label(frame, text="Window size:", bg="white")
        wWS.pack(side=LEFT)
        self.inputWinSize = Entry(frame, width=5)
        self.inputWinSize.pack(side=LEFT, padx=5)
        self.inputWinSize.delete(0, END)
        self.inputWinSize.insert(0, "1024")

        wOL = Label(frame, text="Overlap:", bg="white")
        wOL.pack(side=LEFT)
        self.inputOverlap = Entry(frame, width=5)
        self.inputOverlap.pack(side=LEFT, padx=5)
        self.inputOverlap.delete(0, END)
        self.inputOverlap.insert(0, "512")

        wWT = Label(frame, text="Window function:", bg="white")
        wWT.pack(side=LEFT)

        variable = StringVar(frame)
        variable.set("Hamming")  # default value
        self.inputWinType = OptionMenu(frame, variable, "Hamming", "Bartlett",
                                       "Blackman", "Hanning", "None")
        self.inputWinType.config(bg="white", width=10)
        self.inputWinType.pack(side=LEFT)

        buttonRun = Button(frame, text="GO!", command=self.goTime)
        buttonRun.pack(side=RIGHT)

        # Channel selector
        frameCh = LabelFrame(framePARAM,
                             text="Channels",
                             relief=RIDGE,
                             borderwidth=1,
                             background="white")
        frameCh.pack(fill=BOTH, expand=1, side=TOP)

        self.EOch1 = IntVar()
        self.inputEOch1 = Checkbutton(frameCh,
                                      text="1",
                                      variable=self.EOch1,
                                      bg="white")
        self.inputEOch1.pack(side=LEFT)

        self.EOch2 = IntVar()
        self.inputEOch2 = Checkbutton(frameCh,
                                      text="2",
                                      variable=self.EOch2,
                                      bg="white")
        self.inputEOch2.pack(side=LEFT)

        self.EOch3 = IntVar()
        self.inputEOch3 = Checkbutton(frameCh,
                                      text="3",
                                      variable=self.EOch3,
                                      bg="white")
        self.inputEOch3.pack(side=LEFT)

        self.EOch4 = IntVar()
        self.inputEOch4 = Checkbutton(frameCh,
                                      text="4",
                                      variable=self.EOch4,
                                      bg="white")
        self.inputEOch4.pack(side=LEFT)

        self.EOch5 = IntVar()
        self.inputEOch5 = Checkbutton(frameCh,
                                      text="5",
                                      variable=self.EOch5,
                                      bg="white")
        self.inputEOch5.pack(side=LEFT)

        self.EOch6 = IntVar()
        self.inputEOch6 = Checkbutton(frameCh,
                                      text="6",
                                      variable=self.EOch6,
                                      bg="white")
        self.inputEOch6.pack(side=LEFT)

        self.EOch7 = IntVar()
        self.inputEOch7 = Checkbutton(frameCh,
                                      text="7",
                                      variable=self.EOch7,
                                      bg="white")
        self.inputEOch7.pack(side=LEFT)

        self.EOch8 = IntVar()
        self.inputEOch8 = Checkbutton(frameCh,
                                      text="8",
                                      variable=self.EOch8,
                                      bg="white")
        self.inputEOch8.pack(side=LEFT)

        # IAF Calculation parameters

        frameIAF = LabelFrame(framePARAM,
                              text="IAF Search Limits",
                              relief=RIDGE,
                              borderwidth=1,
                              background="white")
        frameIAF.pack(fill=BOTH, expand=1, side=TOP)

        labelLowBound = Label(frameIAF, text="Lower limit (Hz):", bg="white")
        labelLowBound.pack(side=LEFT)
        self.inputLowBound = Entry(frameIAF, width=5)
        self.inputLowBound.pack(side=LEFT, padx=5)
        self.inputLowBound.delete(0, END)
        self.inputLowBound.insert(0, "7")

        labelUpBound = Label(frameIAF, text="Upper limit (Hz):", bg="white")
        labelUpBound.pack(side=LEFT)
        self.inputUpBound = Entry(frameIAF, width=5)
        self.inputUpBound.pack(side=LEFT, padx=5)
        self.inputUpBound.delete(0, END)
        self.inputUpBound.insert(0, "14")

        self.GaussVar = IntVar()
        self.inputGauss = Checkbutton(frameIAF,
                                      text="Gauss",
                                      variable=self.GaussVar,
                                      bg="white")
        self.inputGauss.pack(side=LEFT)

        buttonRun = Button(frameIAF, text="IAF!", command=self.calculateIAF)
        buttonRun.pack(side=RIGHT)

        self.pack()

        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # END OF TOP FRAME
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

        # my variables
        self.chSelect = 0
        self.chOther = 0

        self.P1 = ndarray(1)
        self.f1 = ndarray(1)

        self.P2 = ndarray(1)
        self.f2 = ndarray(1)

        self.filename1 = "..."
        self.filename2 = "..."

        self.IAF = 10

        self.doGauss = True
        # FIGURE STUFF !!!
        self.Pmax = 0
        self.Pmin = 0
        self.Dmax = 0
        self.Dmin = 0

        frameBOTTOM = Frame(self)
        frameBOTTOM.config(bg="white")
        frameBOTTOM.pack(side=BOTTOM, pady=10)

        frameFig = LabelFrame(frameBOTTOM,
                              text="Spectrum",
                              relief=RIDGE,
                              borderwidth=1,
                              background="white")
        frameFig.pack(fill=X, expand=1, side=LEFT, padx=10)

        self.fig1 = matplotlib.figure.Figure(figsize=(7, 3),
                                             dpi=100)  #,frameon=False)
        self.fig1.set_facecolor('white')
        self.fig = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg(
            self.fig1, master=frameFig)
        self.a1 = self.fig1.add_subplot(121)
        self.a2 = self.fig1.add_subplot(122)
        self.fig.show()
        self.fig.get_tk_widget().pack(side=BOTTOM)

        frameConfig = LabelFrame(frameBOTTOM,
                                 text="Filter configuration",
                                 relief=RAISED,
                                 borderwidth=1,
                                 background="white")
        frameConfig.pack(fill=BOTH, expand=1, side=RIGHT, padx=10)

        frameIAF = LabelFrame(frameConfig,
                              text="Individual Alpha Frequency (IAF)")
        frameIAF.config(bg="white")
        frameIAF.pack(expand=1, side=TOP, padx=10)

        self.inputIAF = Entry(frameIAF, width=5)
        self.inputIAF.pack(side=LEFT, padx=5)
        self.inputIAF.delete(0, END)
        self.inputIAF.insert(0, "0")

        self.buttonWriteDefault = Button(frameIAF,
                                         text="Update Filters",
                                         command=self.updateFilters)
        self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5)

        frameFilters = LabelFrame(frameConfig,
                                  text="Filters",
                                  relief=RAISED,
                                  borderwidth=1,
                                  background="white")
        frameFilters.pack(fill=X, expand=1, side=TOP)

        # THETA FRAME
        frameTheta = LabelFrame(frameFilters,
                                text="Theta",
                                relief=RAISED,
                                borderwidth=1,
                                background="white")
        frameTheta.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputThetaLow = Entry(frameTheta, width=8)
        self.inputThetaLow.pack(side=LEFT, padx=5, pady=5)
        self.inputThetaLow.delete(0, END)
        self.inputThetaLow.insert(0, "0")

        self.inputThetaHigh = Entry(frameTheta, width=8)
        self.inputThetaHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputThetaHigh.delete(0, END)
        self.inputThetaHigh.insert(0, "0")

        # BETA FRAME
        frameBeta = LabelFrame(frameFilters,
                               text="Beta",
                               relief=RAISED,
                               borderwidth=1,
                               background="white")
        frameBeta.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputBetaLow = Entry(frameBeta, width=8)
        self.inputBetaLow.pack(side=LEFT, padx=5, pady=5)
        self.inputBetaLow.delete(0, END)
        self.inputBetaLow.insert(0, "0")

        self.inputBetaHigh = Entry(frameBeta, width=8)
        self.inputBetaHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputBetaHigh.delete(0, END)
        self.inputBetaHigh.insert(0, "0")

        # SMR FRAME
        frameSMR = LabelFrame(frameFilters,
                              text="SMR",
                              relief=RAISED,
                              borderwidth=1,
                              background="white")
        frameSMR.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputSMRLow = Entry(frameSMR, width=8)
        self.inputSMRLow.pack(side=LEFT, padx=5, pady=5)
        self.inputSMRLow.delete(0, END)
        self.inputSMRLow.insert(0, "0")

        self.inputSMRHigh = Entry(frameSMR, width=8)
        self.inputSMRHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputSMRHigh.delete(0, END)
        self.inputSMRHigh.insert(0, "0")

        frameButtons = LabelFrame(frameConfig,
                                  text="Commands",
                                  relief=RAISED,
                                  borderwidth=1,
                                  background="white")
        frameButtons.pack(expand=1, side=BOTTOM)

        self.buttonWriteConfig = Button(frameButtons,
                                        text="Write Filters",
                                        command=self.writeFilters)
        self.buttonWriteConfig.pack(side=LEFT, padx=5, pady=5)

        self.buttonWriteDefault = Button(frameButtons,
                                         text="Reset to Defaults",
                                         command=self.resetIAFtoDefault)
        self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5)

        # self.buttonVisualize = Button(frameButtons, text="VIS",command=self.resetIAFtoDefault)
        # self.buttonVisualize.pack(side=LEFT,padx=5,pady=5)

        self.buttonPrintFig = Button(frameButtons,
                                     text="Print Figure",
                                     command=self.printFigureToFile)
        self.buttonPrintFig.pack(side=LEFT, padx=5, pady=5)
Пример #26
0
    def __init__(self, master):
        # Master Window
        self.master = master

        NUMLINES = 32
        BOXWIDTH = 42
        BUTTONWIDTH = 24
        CHECKWIDTH = 24
        BUTTONPAD = 12

        BG_COLOR1 = 'black'

        # Input Box
        BG_COLOR2 = '#301313'

        # Output Box
        BG_COLOR3 = '#131313'

        BG_COLOR4 = '#333333'
        BG_COLOR5 = '#433333'

        # Text
        FG_COLOR1 = 'white'
        FG_COLOR1 = 'grey'

        BD_COLOR1 = '#120000'

        FIELD_WIDTH = 9

        # Delimiter Options
        # Display, characterString
        global MODES

        DELIMITERS = list(MODES.keys())

        # Date String options
        DATEFORMATS = {
            'YMDhm', 'YMD_hm', 'D/M/Y', 'D/M/Y h:m:s', 'D/M/Y h:m', 'Y-M-D',
            'Y-M-D h:m:s', 'Y-M-D h:m'
        }

        # Initialize the source text.
        source_text_on_load = StringVar()
        source_text_on_load.set(self.getClipboard())
        source_text = StringVar()
        source_text.set(source_text_on_load.get())
        output_text = StringVar()
        output_text.set('')

        src_delimiter = StringVar()
        src_delimiter.set('\n')
        out_delimiter = StringVar()
        out_delimiter.set(',')
        out_quote = StringVar()
        out_quote.set('')

        prefix = StringVar()
        prefix.set('')
        suffix = StringVar()
        suffix.set('')

        find_text = StringVar()
        find_text.set('')
        replace_text = StringVar()
        replace_text.set('')

        capitalize = BooleanVar()
        remove_empty = BooleanVar()
        order_alpha = BooleanVar()
        unique_only = BooleanVar()
        skip_header = BooleanVar()

        capitalize.set(0)
        remove_empty.set(0)
        order_alpha.set(0)
        unique_only.set(0)
        skip_header.set(0)

        date_format = StringVar()
        date_format.set('YMDhm')

        ##################
        # NOTEBOOK 1
        ################

        #################
        # TOP
        ################
        top_frame = Frame(root, bg='', width=36, height=260, pady=3, padx=3)
        top_frame.pack()

        line_numbers = StringVar()
        for i in range(0, NUMLINES):
            line_numbers.set(line_numbers.get() + str(i + 1) + '\n')

        # Source Text Box
        source_text_frame = LabelFrame(top_frame,
                                       text='Source',
                                       fg=FG_COLOR1,
                                       bg=BD_COLOR1,
                                       width=20,
                                       height=400,
                                       pady=3,
                                       padx=3)
        source_text_frame.grid(row=0, column=1, sticky="nw")
        src_txt_line_numbers = Label(source_text_frame,
                                     textvar=line_numbers,
                                     fg=FG_COLOR1,
                                     bg=BG_COLOR4,
                                     anchor='ne',
                                     justify='right',
                                     width=2,
                                     height=NUMLINES,
                                     relief='raised')
        src_txt_line_numbers.grid(row=0, column=0)
        src_txt_box = Label(source_text_frame,
                            textvar=source_text,
                            fg=FG_COLOR1,
                            bg=BG_COLOR3,
                            anchor='nw',
                            justify='left',
                            wraplength=320,
                            width=BOXWIDTH,
                            height=NUMLINES,
                            relief='raised')
        src_txt_box.grid(row=0, column=1)

        # Output Text Box
        output_text_frame = LabelFrame(top_frame,
                                       text='Output',
                                       fg=FG_COLOR1,
                                       bg=BD_COLOR1,
                                       width=20,
                                       height=400,
                                       pady=3,
                                       padx=3)
        output_text_frame.grid(row=0, column=3, sticky="ne")
        out_txt_box = Label(output_text_frame,
                            textvar=line_numbers,
                            fg=FG_COLOR1,
                            bg=BG_COLOR5,
                            anchor='ne',
                            justify='right',
                            width=2,
                            height=NUMLINES,
                            relief='raised')
        out_txt_box.grid(row=0, column=0)
        out_txt_box = Label(output_text_frame,
                            textvar=output_text,
                            fg=FG_COLOR1,
                            bg=BG_COLOR2,
                            anchor='nw',
                            justify='left',
                            wraplength=320,
                            width=BOXWIDTH,
                            height=NUMLINES,
                            relief='raised')
        out_txt_box.grid(row=0, column=1)

        #################
        # MIDDLE
        ################
        # delimiter_frame = LabelFrame(master, fg=FG_COLOR1, bg=BG_COLOR1, pady=10, text='Delimiter Settings')
        # delimiter_frame.pack()

        delimiter_frame = LabelFrame(master,
                                     fg=FG_COLOR1,
                                     bg=BG_COLOR1,
                                     pady=10,
                                     text='Delmiter (From -> To)')
        delimiter_frame.pack()

        # MIDDLE LEFT
        src_delimiter_container = Frame(delimiter_frame, bg=BG_COLOR1, padx=5)
        src_delimiter_container.grid(sticky=('n', 'w', 's', 'e'),
                                     row=0,
                                     column=0,
                                     columnspan=3)

        # src_delimiter_label = Label(src_delimiter_container, text="Src", justify='left', height=1, width=3, anchor='e', relief='groove')
        # src_delimiter_label.grid(row=0, column=0, sticky=('n','w','s','e'))

        # src_delimiter_radio = Frame(src_delimiter_container, relief='groove')
        # src_delimiter_radio.grid(row=0, column=1, sticky=('n','w','s','e'))
        #
        # i = 0
        # for text, mode in MODES:
        #     b = Radiobutton(src_delimiter_radio, text=text, width=8,
        #                     variable=src_delimiter, value=mode, indicatoron=0)
        #     b.grid(row=0, column=i)
        #     i = i+1

        src_delimiter_option = OptionMenu(
            delimiter_frame, src_delimiter,
            *DELIMITERS)  # Pointer to option array
        src_delimiter_option.grid(row=0, column=0)

        # MIDDLE MIDDLE - Delimiter
        out_delimiter_container = Frame(delimiter_frame, bg=BG_COLOR1, padx=5)
        out_delimiter_container.grid(sticky=('n', 'w', 's', 'e'),
                                     row=1,
                                     column=0,
                                     columnspan=3)

        # out_delimiter_label = Label(out_delimiter_container, text="Out", justify='center', height=1, width=3, anchor='e', relief='groove')
        # out_delimiter_label.grid(sticky=('n','w','s','e'),row=0, column=0)
        #
        # out_delimiter_radio = Frame(out_delimiter_container, width=240, height=120, relief='groove')
        # out_delimiter_radio.grid(sticky=('n','w','s','e'),row=0, column=1)
        #
        # i = 1
        # for text, mode in MODES:
        #     if mode != 'none':
        #       b = Radiobutton(out_delimiter_radio, text=text, width=8,
        #                       variable=out_delimiter, value=mode, indicatoron=0)
        #       b.grid(row=0, column=i)
        #       i = i+1

        out_delimiter_option = OptionMenu(
            delimiter_frame, out_delimiter,
            *DELIMITERS)  # Pointer to option array
        out_delimiter_option.grid(row=0, column=1)

        mid_container = Frame(master, bg=BG_COLOR1)
        mid_container.pack()

        textvar_container = LabelFrame(mid_container,
                                       fg=FG_COLOR1,
                                       bg=BG_COLOR1,
                                       pady=10,
                                       text='Text Operations')
        textvar_container.grid(row=0, column=0, columnspan=5)

        # MIDDLE BOTTOM - Quote
        out_quote_container = Frame(textvar_container,
                                    bg=BG_COLOR1,
                                    width=100,
                                    height=160,
                                    pady=8)
        out_quote_container.grid(row=0, column=0)

        out_quote_label = Label(out_quote_container,
                                text="Quote",
                                justify='center',
                                width=FIELD_WIDTH,
                                height=1,
                                relief='groove')
        out_quote_label.grid(row=0, column=0)

        out_quote_entry = Entry(out_quote_container,
                                textvar=out_quote,
                                justify='center',
                                width=FIELD_WIDTH,
                                relief='groove',
                                bg=FG_COLOR1,
                                fg=BG_COLOR1)
        out_quote_entry.grid(row=1, column=0)

        # MIDDLE BOTTOM - Prefix
        prefix_container = Frame(textvar_container,
                                 bg=BG_COLOR1,
                                 width=100,
                                 height=160,
                                 pady=8)
        prefix_container.grid(row=0, column=1)

        prefix_label = Label(prefix_container,
                             text="Prefix",
                             justify='center',
                             width=FIELD_WIDTH,
                             height=1,
                             relief='groove')
        prefix_label.grid(row=0, column=0)

        prefix_entry = Entry(prefix_container,
                             textvar=prefix,
                             justify='center',
                             width=FIELD_WIDTH,
                             relief='groove',
                             bg=FG_COLOR1,
                             fg=BG_COLOR1)
        prefix_entry.grid(row=1, column=0)

        # MIDDLE BOTTOM - Suffix
        suffix_container = Frame(textvar_container,
                                 bg=BG_COLOR1,
                                 width=100,
                                 height=160,
                                 pady=8)
        suffix_container.grid(row=0, column=2)

        suffix_label = Label(suffix_container,
                             text="Suffix",
                             justify='center',
                             width=FIELD_WIDTH,
                             height=1,
                             relief='groove')
        suffix_label.grid(row=0, column=0)

        suffix_entry = Entry(suffix_container,
                             textvar=suffix,
                             justify='center',
                             width=FIELD_WIDTH,
                             relief='groove',
                             bg=FG_COLOR1,
                             fg=BG_COLOR1)
        suffix_entry.grid(row=1, column=0)

        ######################
        # FIND REPLACE PANEL #
        ######################
        find_container = Frame(textvar_container,
                               bg=BG_COLOR1,
                               width=100,
                               height=160,
                               pady=8)
        find_container.grid(row=0, column=3)

        find_label = Label(find_container,
                           text="Replace",
                           justify='left',
                           width=FIELD_WIDTH,
                           height=1,
                           relief='groove')
        find_label.grid(row=0, column=0)

        find_entry = Entry(find_container,
                           textvar=find_text,
                           justify='left',
                           width=FIELD_WIDTH * 2,
                           relief='groove',
                           bg=FG_COLOR1,
                           fg=BG_COLOR1)
        find_entry.grid(row=1, column=0)

        replace_container = Frame(textvar_container,
                                  bg=BG_COLOR1,
                                  width=100,
                                  height=160,
                                  pady=8)
        replace_container.grid(row=0, column=4)

        replace_label = Label(replace_container,
                              text="With",
                              justify='left',
                              width=FIELD_WIDTH,
                              height=1,
                              relief='groove')
        replace_label.grid(row=0, column=0)

        replace_entry = Entry(replace_container,
                              textvar=replace_text,
                              justify='left',
                              width=FIELD_WIDTH * 2,
                              relief='groove',
                              bg=FG_COLOR1,
                              fg=BG_COLOR1)
        replace_entry.grid(row=1, column=0)

        # DATE MENU
        date_frame = LabelFrame(mid_container,
                                bg=BG_COLOR1,
                                fg=FG_COLOR1,
                                text='Date',
                                width=650,
                                height=280,
                                pady=3,
                                padx=3,
                                relief='groove')
        date_frame.grid(row=0, column=6)

        date_option = OptionMenu(date_frame, date_format,
                                 *DATEFORMATS)  # Pointer to option array
        date_option.grid(row=0, column=0)

        date_button = Button(
            date_frame,
            text="Copy",
            command=lambda: self.setClipboard(self.printDate(date_format.get())
                                              ),
            width=BUTTONWIDTH / 2,
            highlightbackground=BG_COLOR1,
        )
        date_button.grid(row=1, column=0)

        #################
        # BOTTOM
        ################
        control_frame = Frame(root,
                              bg='',
                              width=650,
                              height=140,
                              pady=3,
                              padx=3,
                              relief='groove')
        control_frame.pack()
        #
        # # BOTTOM LEFT
        src_control_container = Frame(control_frame,
                                      bg=BG_COLOR1,
                                      width=200,
                                      height=280,
                                      padx=BUTTONPAD)
        src_control_container.grid(sticky='w', row=0, column=0)

        # Refresh State to Load
        refresh_button = Button(
            src_control_container,
            text="Refresh To Load State",
            command=lambda: source_text.set(source_text_on_load.get()),
            width=BUTTONWIDTH,
            highlightbackground=BG_COLOR1)
        refresh_button.grid(row=0, column=0)

        clipboard_button = Button(
            src_control_container,
            text="Copy from Clipboard",
            command=lambda: source_text.set(self.getClipboard()),
            width=BUTTONWIDTH,
            highlightbackground=BG_COLOR1)
        clipboard_button.grid(row=1, column=0)

        pushback_button = Button(
            src_control_container,
            text="Output to Input",
            command=lambda: source_text.set(output_text.get()),
            width=BUTTONWIDTH,
            highlightbackground=BG_COLOR1)
        pushback_button.grid(row=2, column=0)

        # BOTTOM MIDDLE
        settings_container = Frame(control_frame,
                                   bg='grey',
                                   width=200,
                                   height=280,
                                   pady=3,
                                   padx=3)
        settings_container.grid(row=0, column=1)

        order_check = Checkbutton(settings_container,
                                  text="Alphabeticalize",
                                  variable=order_alpha,
                                  anchor='w',
                                  width=CHECKWIDTH)
        order_check.pack(anchor='w')

        cap_check = Checkbutton(settings_container,
                                text="Capitalize",
                                variable=capitalize,
                                anchor='w',
                                width=CHECKWIDTH)
        cap_check.pack(anchor='w')

        header_check = Checkbutton(settings_container,
                                   text="Skip Header",
                                   variable=skip_header,
                                   anchor='w',
                                   width=CHECKWIDTH)
        header_check.pack(anchor='w')

        rem_check = Checkbutton(settings_container,
                                text="Strip Blanks",
                                variable=remove_empty,
                                anchor='w',
                                width=CHECKWIDTH)
        rem_check.pack(anchor='w')

        unique_check = Checkbutton(settings_container,
                                   text="Unique Values",
                                   variable=unique_only,
                                   anchor='w',
                                   width=CHECKWIDTH)
        unique_check.pack(anchor='w')

        # BOTTOM RIGHT
        out_control_container = Frame(control_frame,
                                      bg=BG_COLOR1,
                                      width=200,
                                      height=280,
                                      padx=BUTTONPAD)
        out_control_container.grid(row=0, column=2)

        fr_button = Button(
            out_control_container,
            text="Find/Replace",
            command=lambda: output_text.set(
                self.findReplace(source_text.get(), find_text.get(),
                                 replace_text.get())),
            width=BUTTONWIDTH,
            highlightbackground=BG_COLOR1,
        )
        fr_button.pack()

        go_button = Button(
            out_control_container,
            text="Process",
            command=lambda: output_text.set(
                self.process(source_text.get(), src_delimiter.get(
                ), out_delimiter.get(), out_quote.get(), order_alpha.get(
                ), skip_header.get(), remove_empty.get(), unique_only.get(),
                             capitalize.get(), prefix.get(), suffix.get(),
                             find_text.get(), replace_text.get())),
            width=BUTTONWIDTH,
            highlightbackground=BG_COLOR1,
        )
        go_button.pack()

        copy_button = Button(
            out_control_container,
            text="Copy to Clipboard",
            command=lambda: self.setClipboard(output_text.get()),
            width=BUTTONWIDTH,
            highlightbackground=BG_COLOR1)
        copy_button.pack()

        close_button = Button(out_control_container,
                              text="Quit",
                              command=master.quit,
                              width=BUTTONWIDTH,
                              highlightbackground=BG_COLOR1)
        close_button.pack()
Пример #27
0
    def _init_components(self):
        # group type selection (alternating, classical, sporadic, exceptional)
        group_type_frame = LabelFrame(self, text="Group type", padx=10, pady=5)
        group_type_frame.pack(expand=True, fill='x')

        # group type radio buttons (Alternating, Classical etc.)
        self._group_type = StringVar()
        self._type_radio_buttons = dict()
        for group_type in ("Alternating", "Classical", "Exceptional", "Sporadic"):
            radiobutton = Radiobutton(group_type_frame, variable=self._group_type, value=group_type, text=group_type)
            radiobutton.pack(anchor='nw')
            self._type_radio_buttons[group_type] = radiobutton

        # set group type selection handler
        self._group_type.trace("w", lambda n, i, m: self._group_type_selection())

        # spacer
        Frame(self, height=10).pack()

        # parameters for each group (degree for alternating, field and dimension for classical etc.)
        # notice that we do not pack LabelFrame contents. We do that in _group_type_selection method instead.
        group_params_frame = LabelFrame(self, text="Parameters", padx=10, pady=5)
        group_params_frame.pack(expand=True, fill='x')

        # alternating
        self._alt_params = Frame(group_params_frame)
        self._alt_params.columnconfigure(1, weight=1)
        Label(self._alt_params, text="Degree").grid(sticky='w')
        self._alt_degree = NumberBox(self._alt_params, constraints=Constraints(min=5))
        self._alt_degree.grid(row=0, column=1, sticky='we')

        # classical
        self._clas_params = Frame(group_params_frame)
        self._clas_params.columnconfigure(1, weight=1)

        Label(self._clas_params, text="Type").grid(row=0, sticky='w')
        self._clas_type = OptionList(self._clas_params, values=ClassicalGroup.types())
        self._clas_type.variable.trace("w", lambda n, i, m: self._classical_group_type_selection())
        self._clas_type.grid(row=0, column=1, sticky='we')

        Label(self._clas_params, text="Dimension").grid(row=1, sticky='w')
        self._clas_dim = NumberBox(self._clas_params)
        self._clas_dim.grid(row=1, column=1, sticky='we')

        Label(self._clas_params, text="Field order").grid(row=2, sticky='w')
        self._clas_field = NumberBox(self._clas_params, constraints=Constraints(primality=numeric.PRIME_POWER))
        self._clas_field.grid(row=2, column=1, sticky='we')

        self._classical_group_type_selection()

        # exceptional
        self._ex_params = Frame(group_params_frame)
        self._ex_params.columnconfigure(1, weight=1)

        Label(self._ex_params, text="Type").grid(row=0, sticky='w')
        self._ex_type = OptionList(self._ex_params, values=ExceptionalGroup.types())
        self._ex_type.setvar(value=ExceptionalGroup.types()[0])
        self._ex_type.grid(row=0, column=1, sticky='we')

        Label(self._ex_params, text="Field order").grid(row=1, sticky='w')
        self._ex_field = NumberBox(self._ex_params, constraints=Constraints(primality=numeric.PRIME_POWER))
        self._ex_field.grid(row=1, column=1, sticky='we')

        # sporadic
        self._spor_params = Frame(group_params_frame)
        self._spor_params.columnconfigure(1, weight=1)

        Label(self._spor_params, text="Group").grid(row=0, sticky='w')
        self._sporadic_group = OptionList(self._spor_params, values=SporadicGroup.all_groups())
        self._sporadic_group.grid(row=0, column=1, sticky='we')
Пример #28
0
class BoardConfig(Frame):

    def __init__(self, master=None, main=None):
        Frame.__init__(self, master)

        self.parent = master
        self.main = main

        self.parent.geometry("336x424")
        self.parent.title(os.getenv("NAME") + " - Board Config")
        self.master.configure(padx=10, pady=10)

        self.intvar = IntVar()

        #Arch
        self.arch_var = IntVar()
        lf_arch = LabelFrame(self.parent, text="Architecture")
        lf_arch.pack(fill=X, expand=True, side=TOP)

        frame_arch = Frame(lf_arch)
        frame_arch.pack(fill=X, expand=True, side=TOP)

        frame_left1 = Frame(frame_arch)
        frame_left1.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right1 = Frame(frame_arch)
        frame_right1.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_arch_8 = Radiobutton(frame_left1, text="8-bit ", anchor="w", width=10, value=8, variable=self.arch_var, command=self.update_mode)
        self.radioButton_arch_8.pack(fill=X, side=TOP)

        self.radioButton_arch_32 = Radiobutton(frame_right1, text="32-bit", anchor="w", width=10, value=32, variable=self.arch_var, command=self.update_mode)
        self.radioButton_arch_32.pack(fill=X, side=TOP)


        #Mode
        self.mode_var = StringVar()
        lf_mode = LabelFrame(self.parent, text="Programming mode")
        lf_mode.pack(fill=X, expand=True, side=TOP)

        frame_mode = Frame(lf_mode)
        frame_mode.pack(fill=X, expand=True, side=TOP)

        frame_left2 = Frame(frame_mode)
        frame_left2.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right2 = Frame(frame_mode)
        frame_right2.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_mode_icsp = Radiobutton(frame_left2, text="ICSP", anchor="w", width=10, value="icsp", variable=self.mode_var, command=self.update_mode)
        self.radioButton_mode_icsp.pack(side=TOP, fill=X)

        self.radioButton_mode_bootloader = Radiobutton(frame_right2, text="Bootloader", anchor="w", width=10, value="bootloader", variable=self.mode_var, command=self.update_mode)
        self.radioButton_mode_bootloader.pack(side=TOP, fill=X)


        #Bootloader
        self.boot_var = StringVar()
        self.lf_boot = LabelFrame(self.parent, text="Bootloader")
        self.lf_boot.pack(fill=X, expand=True, side=TOP)

        frame_boot = Frame(self.lf_boot)
        frame_boot.pack(fill=X, expand=True, side=TOP)

        frame_left3 = Frame(frame_boot)
        frame_left3.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right3 = Frame(frame_boot)
        frame_right3.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_bootloader_v1_v2 = Radiobutton(frame_left3, text="v1.x or v2.x", anchor="w", width=10, value="v1_v2", variable=self.boot_var)
        self.radioButton_bootloader_v1_v2.pack(fill=X, side=TOP, expand=True)
        self.radioButton_bootloader_v4 = Radiobutton(frame_right3, text="v4.x", anchor="w", width=10, value="v4", variable=self.boot_var)
        self.radioButton_bootloader_v4.pack(fill=X, side=TOP, expand=True)


        #Devices 8bit
        self.dev8_var = StringVar()
        self.lf_dev8 = LabelFrame(self.parent, text="Devices")
        self.lf_dev8.pack(fill=X, expand=True, side=TOP)

        self.frame_8b = Frame(self.lf_dev8)
        self.frame_8b.pack(fill=X, expand=True, side=TOP)


        #Devices 32bit
        self.dev32_var = StringVar()
        self.lf_dev32 = LabelFrame(self.parent, text="Devices")
        self.lf_dev32.pack(fill=X, expand=True, side=TOP)

        self.frame_32b = Frame(self.lf_dev32)
        self.frame_32b.pack(fill=X, expand=True, side=TOP)

        frame_buttons = Frame(self.parent)
        Button(frame_buttons, text="Accept", command=self.accept_config).pack(fill=X, expand=True, side=RIGHT)
        Button(frame_buttons, text="Cancel", command=self.quit).pack(fill=X, expand=True, side=LEFT)
        frame_buttons.pack(fill=X, expand=True, side=BOTTOM)

        frame_advance = Frame(self.parent)
        self.advanceoptions = Button(frame_advance, text="Advance options", command=self.advance)
        self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM)
        frame_advance.pack(fill=X, expand=True, side=BOTTOM)

        frame_warning = Frame(self.parent)
        self.label_warning = Label(frame_warning, fg="red", text="warning!", anchor="w")
        self.label_warning.pack(fill=X, expand=True, side=BOTTOM)
        frame_warning.pack(fill=X, expand=True, side=BOTTOM)

        self.build_devices_arch()
        self.load_config()
        self.init_groups()




    #----------------------------------------------------------------------
    def quit(self):

        self.master.destroy()


    #----------------------------------------------------------------------
    def build_devices_arch(self):

        #8bits
        name_checked = self.main.configIDE.config("Board", "board_8", "Pinguino 2550")
        arch_8 = filter(lambda board:board.arch==8, self.main.pinguinoAPI._boards_)
        arch_8.sort()

        frame_left = Frame(self.frame_8b)
        frame_left.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right = Frame(self.frame_8b)
        frame_right.pack(expand=True, fill=BOTH, side=RIGHT)

        parent = frame_left  #left
        for board in arch_8:
            if arch_8.index(board) == (len(arch_8) / 2) + 1:
                parent = frame_right  #rigth

            radio = Radiobutton(parent, text=board.name, anchor="w", width=10, value=board.name, variable=self.dev8_var, command=lambda :self.set_board_name(board.name, "8"))
            radio.pack(expand=True, fill=X, side=TOP)

            #radio = QtGui.QRadioButton(self.board_config.groupBox_devices_8)
            #self.board_config.gridLayout_device_8.addWidget(radio, count, side, 1, 1)
            #radio.setText(board.name)
            #radio.setToolTip(board.proc)

            if name_checked == board.name: radio.select()
            #self.connect(radio, QtCore.SIGNAL("clicked()"), self.set_board_name(board.name, "8"))


        #32bits
        name_checked = self.main.configIDE.config("Board", "board_32", "PIC32 Pinguino OTG")
        arch_32 = filter(lambda board:board.arch==32, self.main.pinguinoAPI._boards_)
        arch_32.sort()

        frame_left0 = Frame(self.frame_32b)
        frame_left0.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right0 = Frame(self.frame_32b)
        frame_right0.pack(expand=True, fill=BOTH, side=RIGHT)

        parent = frame_left0  #left
        for board in arch_32:
            if arch_32.index(board) == (len(arch_32) / 2) + 1:
                parent = frame_right0  #rigth

            radio = Radiobutton(parent, text=board.name, anchor="w", width=10, value=board.name, variable=self.dev32_var, command=lambda :self.set_board_name(board.name, "32"))
            radio.pack(expand=True, fill=X, side=TOP)

            #radio = QtGui.QRadioButton(self.board_config.groupBox_devices_32)
            #self.board_config.gridLayout_device_32.addWidget(radio, count, side, 1, 1)
            #radio.setText(board.name)
            #radio.setToolTip(board.proc)

            if name_checked == board.name: radio.select()
            #self.connect(radio, QtCore.SIGNAL("clicked()"), self.set_board_name(board.name, "32"))



    #----------------------------------------------------------------------
    def load_config(self):

        self.main.configIDE.load_config()

        arch = self.main.configIDE.config("Board", "arch", 8)
        getattr(self.radioButton_arch_8, "select" if (arch == 8) else "deselect")()
        getattr(self.radioButton_arch_32, "select" if (arch == 32) else "deselect")()

        if arch == 32: self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM)
        else: self.advanceoptions.forget()

        mode = self.main.configIDE.config("Board", "mode", "bootloader")
        getattr(self.radioButton_mode_bootloader, "select" if (mode == "bootloader") else "deselect")()
        getattr(self.radioButton_mode_icsp, "select" if (mode == "icsp") else "deselect")()

        bootloader = self.main.configIDE.config("Board", "bootloader", "v1_v2")
        getattr(self.radioButton_bootloader_v1_v2, "select" if (bootloader == "v1_v2") else "deselect")()
        getattr(self.radioButton_bootloader_v4, "select" if (bootloader == "v4") else "deselect")()

        self.update_mode()


    #----------------------------------------------------------------------
    def update_mode(self):

        mode_boot = self.mode_var.get() == "bootloader"
        arch_8 = self.arch_var.get() == 8

        if mode_boot and arch_8: self.lf_boot.pack(fill=X, expand=True, side=TOP)
        else: self.lf_boot.forget()
        self.init_groups()

        if not mode_boot:
            self.label_warning.configure(text="WARNING!! this mode can overwite the bootloader code.")
        else:
            self.label_warning.configure(text="")



    #----------------------------------------------------------------------
    def set_board_name(self, name, arch):

        def dummy():
            self.main.configIDE.set("Board", "board_"+arch, name)
        return dummy


    #----------------------------------------------------------------------
    def init_groups(self):

        self.lf_dev32.forget()
        self.lf_dev8.forget()

        if self.arch_var.get() == 8:
            self.lf_dev8.pack(fill=X, expand=True, side=TOP)
            self.advanceoptions.forget()

        else:
            self.lf_dev32.pack(fill=X, expand=True, side=TOP)
            self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM)



    #----------------------------------------------------------------------
    def save_config(self):

        #if self.board_config.radioButton_arch_8.isChecked(): arch = 8
        #else: arch = 32
        self.main.configIDE.set("Board", "arch", self.arch_var.get())

        #if self.board_config.radioButton_mode_bootloader.isChecked(): mode = "bootloader"
        #else: mode = "icsp"
        self.main.configIDE.set("Board", "mode", self.mode_var.get())

        #if self.board_config.radioButton_bootloader_v1_v2.isChecked(): bootloader = "v1_v2"
        #else: bootloader = "v4"
        self.main.configIDE.set("Board", "bootloader", self.boot_var.get())

        name = self.main.configIDE.config("Board", "board_"+str(self.arch_var.get()), None)
        self.main.configIDE.set("Board", "board", name)



    #----------------------------------------------------------------------
    def accept_config(self):

        self.save_config()
        self.main.configIDE.save_config()
        self.main.statusbar_ide(self.main.get_status_board())
        self.close_advance()
        self.quit()


    #----------------------------------------------------------------------
    def advance(self):

        root = Toplevel()
        self.frame_advance = BoardConfigAdvance(master=root, main=self.main)
        self.frame_advance.mainloop()


    #----------------------------------------------------------------------
    def close_advance(self):

        try: assert self.frame_advance
        except: return
        self.frame_advance.quit()
Пример #29
0
  updateRGB()
  
def v_sel(val):
  print "v_sel(" + str(val) + ")"
  selection = "V = " + str(v_var.get())
  v_label.config(text = selection)
  updateRGB()
  
tk = Tk()
tk.wm_title("Colour Demo")

canvas = Canvas(width=400, height=300, bg="#%02x%02x%02x" % (0, 0, 0))
canvas.pack()

rgbFrame = LabelFrame(tk, text="RGB")
rgbFrame.pack(fill="both", expand="yes")

r_var = IntVar()
r_scale = Scale(rgbFrame, variable = r_var, from_=0, to=255, showvalue=0, orient=HORIZONTAL, command=r_sel)
r_scale.pack()
r_label = Label(rgbFrame)
r_label.pack()

g_var = IntVar()
g_scale = Scale(rgbFrame, variable = g_var, from_=0, to=255, showvalue=0, orient=HORIZONTAL, command=g_sel)
g_scale.pack()
g_label = Label(rgbFrame)
g_label.pack()

b_var = IntVar()
b_scale = Scale(rgbFrame, variable = b_var, from_=0, to=255, showvalue=0, orient=HORIZONTAL, command=b_sel)
Пример #30
0
class MainWindow:
    def __init__(self):
        self.root = Tk()
        self.input_type = Tkinter.IntVar()
        self.input_type.set(1)
        self.normalize_data = Tkinter.IntVar()
        self.normalize_data.set(1)
        self.root.title("Code energy calculator")
        self.left_frame = LabelFrame(self.root, text="Input and output")
        self.left_frame.pack(side=Tkinter.LEFT,
                             fill=Tkinter.BOTH,
                             expand=True,
                             padx=(10, 5),
                             pady=10)
        self.right_frame = LabelFrame(self.root, text="Code")
        self.right_frame.pack(side=Tkinter.RIGHT,
                              fill=Tkinter.BOTH,
                              expand=True,
                              padx=(5, 10),
                              pady=10)
        code_hscroll = Scrollbar(self.right_frame, orient=Tkinter.HORIZONTAL)
        code_hscroll.pack(side=Tkinter.BOTTOM, fill=Tkinter.X)
        code_vscroll = Scrollbar(self.right_frame)
        code_vscroll.pack(side=Tkinter.RIGHT, fill=Tkinter.Y)
        self.code_text = Text(self.right_frame,
                              wrap=Tkinter.NONE,
                              xscrollcommand=code_hscroll.set,
                              yscrollcommand=code_vscroll.set)
        self.code_text.pack()
        self.code_text.insert(Tkinter.INSERT, DEFAULT_CODE)
        code_hscroll.config(command=self.code_text.xview)
        code_vscroll.config(command=self.code_text.yview)
        self.input_file_entry =\
            self.create_and_add_file_field(self.left_frame, "Input file", 5, False)
        self.spherical_coord_option =\
            Radiobutton(self.left_frame, text="Spherical coordinates",
                        variable=self.input_type, value=1)
        self.spherical_coord_option.pack(anchor=Tkinter.W)
        self.cartesian_coord_option =\
            Radiobutton(self.left_frame, text="Cartesian coordinates",
                        variable=self.input_type, value=2)
        self.cartesian_coord_option.pack(anchor=Tkinter.W)
        self.spherical_coord_option.select()
        self.output_file_entry =\
            self.create_and_add_file_field(self.left_frame, "Output file", 5, True)
        self.normalize_check = Checkbutton(self.left_frame,
                                           text="Normalize data",
                                           variable=self.normalize_data,
                                           offvalue=0,
                                           onvalue=1)
        self.normalize_check.pack()
        self.normalize_check.deselect()
        self.do_button = Button(self.left_frame, text="Run", command=self.run)
        self.do_button.pack(side=Tkinter.BOTTOM, pady=(0, 10))

    def create_and_add_file_field(self, parent, title, pad, is_save):
        title_label = Label(parent, text=title)
        title_label.pack(side=Tkinter.TOP, padx=pad)
        container_frame = Frame(parent)
        container_frame.pack(side=Tkinter.TOP, padx=pad, pady=(0, pad))
        filename_entry = Entry(container_frame)
        filename_entry.pack(side=Tkinter.LEFT)
        browse_button = \
            Button(container_frame, text="Browse...",
                   command=lambda: self.select_file(filename_entry, is_save))
        browse_button.pack(side=Tkinter.RIGHT)
        return filename_entry

    @staticmethod
    def select_file(text_field, is_save):
        text_field.delete(0, Tkinter.END)
        if is_save:
            filename = asksaveasfilename()
        else:
            filename = askopenfilename()
        text_field.insert(0, filename)

    def run(self):
        input_fname = self.input_file_entry.get()
        output_fname = self.output_file_entry.get()
        code = self.code_text.get(1.0, Tkinter.END)
        do_work(input_fname, output_fname, code, self.input_type.get(),
                self.normalize_data.get())

    def show(self):
        self.root.mainloop()
class ArduinoSetup:
    def __init__(self, master, args):
        self.master = master
        self.master.minsize(width=360, height=600)
        self.master.title(PROJECT_TEXT)

        # GUI PROPS
        self.padXOut = 5
        self.padYOut = 3
        self.padXIn = 5
        self.padYIn = 3
        self.frameRelief = GROOVE
        self.frameBorder = 2
        self.infoFG = "teal"
        self.selectBG = "teal"
        self.textBG = "white"
        self.errorBG = "red"

        self.vAction = StringVar()
        if args.verify:
            self.vAction.set("--verify")
        elif args.upload:
            self.vAction.set("--upload")
        else:
            self.vAction.set("")

        self.verify = args.verify
        self.upload = args.upload
        self.vPath = StringVar()
        self.vPath.set(args.arduino)
        self.vBoard = StringVar()
        self.vBoard.set(args.board)
        self.vPort = StringVar()
        self.vPort.set(args.port)
        self.vFile = StringVar()
        self.vFile.set(args.file)

        # GUI WIDGETS
        self.errorPath = True
        self.errorBoard = True
        self.errorPort = True
        self.errorFile = True

        self.enablePath = True
        self.enableBoard = True
        self.enablePort = True
        self.enableFile = True

        if self.vPath.get() != "":
            self.enablePath = False
        if self.vBoard.get() != "":
            self.enableBoard = False
        if self.vPort.get() != "":
            self.enablePort = False
        if self.vFile.get() != "":
            self.enableFile = False

        if self.enablePath:
            optArdu = {}
            optArdu["defaultextension"] = ".exe"
            optArdu["filetypes"] = [("exe files", ".exe"), ("all files", ".*")]
            # options['initialdir'] = 'C:\\'
            optArdu["initialfile"] = "arduino.exe"
            optArdu["parent"] = master
            optArdu["title"] = "Open arduino.exe"

            if system() == WINDOWS:
                pathexample = """Example: C:/Program Files/Arduino/arduino.exe"""
            else:
                pathexample = """Location of arduino executable"""

            self.vcmdPath = master.register(self.validatePath)
            self.framePath = LabelFrame(master, text="Arduino.exe path:", bd=self.frameBorder, relief=self.frameRelief)
            self.entryPath = Entry(
                self.framePath,
                bg=self.textBG,
                validate="all",
                validatecommand=(self.vcmdPath, "%P"),
                textvar=self.vPath,
                selectbackground=self.selectBG,
            )
            self.entryPath.pack(fill=X, padx=self.padXIn, pady=self.padYIn)
            self.buttonPath = Button(
                self.framePath, text="Find arduino...", command=lambda: self.openPath(optArdu, self.vPath)
            )
            self.buttonPath.pack(fill=X, padx=self.padXIn, pady=self.padYIn)
            self.labelPathInfo = Label(self.framePath, fg=self.infoFG, text=pathexample)
            self.labelPathInfo.pack(fill=X)
            self.framePath.pack(fill=X, padx=self.padXOut, pady=self.padYOut)

        if self.enableBoard:
            self.vcmdBoard = master.register(self.validateBoard)
            self.frameBoard = LabelFrame(master, text="Board:", bd=self.frameBorder, relief=self.frameRelief)
            self.entryBoard = Entry(
                self.frameBoard,
                bg=self.textBG,
                validate="all",
                validatecommand=(self.vcmdBoard, "%P"),
                textvar=self.vBoard,
                selectbackground=self.selectBG,
            )
            self.entryBoard.pack(fill=X, padx=self.padXIn, pady=self.padYIn)
            self.labelBoardInfo = Label(self.frameBoard, fg=self.infoFG, text="""package:arch:board[:parameters]""")
            self.labelBoardInfo.pack(fill=X, padx=self.padXIn, pady=self.padYIn)
            self.textBoardExample = Text(self.frameBoard, fg=self.infoFG, width=50, height=6)
            self.textBoardExample.insert(
                END,
                """Packages: arduino, sparkfun, ...
Arch: avr, sam, ...
Boards: uno, mega, promicro, ...
Parameters: cpu=CPU, ...
Example:	 arduino:avr:nano:cpu=atmega168
	 SparkFun:avr:promicro:cpu=8MHzatmega32U4""",
            )
            self.textBoardExample.config(state=DISABLED)
            self.textBoardExample.pack(fill=X, padx=self.padXIn, pady=self.padYIn)

            self.frameBoard.pack(fill=X, padx=self.padXOut, pady=self.padYOut)

        if self.enablePort:
            self.framePort = LabelFrame(master, text="Port:", bd=self.frameBorder, relief=self.frameRelief)
            if system() == WINDOWS:
                self.ports = serial_ports()
                # only for testing
                # self.ports.append(("COM", "Device 123"))
                self.frameListbox = Frame(self.framePort)
                scrollbar = Scrollbar(self.frameListbox)
                scrollbar.pack(side=RIGHT, fill=Y)
                self.listboxPort = Listbox(
                    self.frameListbox,
                    height=2,
                    bg=self.textBG,
                    selectbackground=self.selectBG,
                    yscrollcommand=scrollbar.set,
                )
                scrollbar.config(command=self.listboxPort.yview)
                self.listboxPort.insert(END, *self.ports)
                self.listboxPort.pack(fill=BOTH, expand=1)
                self.listboxPort.bind("<<ListboxSelect>>", self.portSelected)
                self.frameListbox.pack(fill=BOTH, expand=1, padx=self.padXIn, pady=self.padYIn)
                self.labelPortInfo = Label(self.framePort, fg=self.infoFG, text="port | port name | device name")
                self.labelPortInfo.pack(side=BOTTOM, fill=X, padx=self.padXIn, pady=self.padYIn)
            else:
                self.vcmdPort = master.register(self.validatePort)
                self.entryPort = Entry(
                    self.framePort,
                    bg=self.textBG,
                    validate="all",
                    validatecommand=(self.vcmdPort, "%P"),
                    textvar=self.vPort,
                    selectbackground=self.selectBG,
                )
                self.entryPort.pack(fill=X, padx=self.padXIn, pady=self.padYIn)
                self.labelPortInfo = Label(self.framePort, fg=self.infoFG, text="""Example: /dev/ttyUSB0""")
                self.labelPortInfo.pack(side=BOTTOM, fill=X, padx=self.padXIn, pady=self.padYIn)
            self.framePort.pack(fill=BOTH, expand=1, padx=self.padXOut, pady=self.padYOut)

        if self.enableFile:
            optFile = {}
            optFile["defaultextension"] = ".ino"
            optFile["filetypes"] = [("arduino source files", ".ino"), ("all files", ".*")]
            # options['initialdir'] = 'C:\\'
            optFile["initialfile"] = ""
            optFile["parent"] = master
            optFile["title"] = "Open arduino source code"

            self.vcmdFile = master.register(self.validateFile)
            self.frameFile = LabelFrame(master, text="Source code path:", bd=self.frameBorder, relief=self.frameRelief)
            self.entryFile = Entry(
                self.frameFile,
                bg=self.textBG,
                validate="all",
                validatecommand=(self.vcmdFile, "%P"),
                textvar=self.vFile,
                selectbackground=self.selectBG,
            )
            self.entryFile.pack(fill=X, padx=self.padXIn, pady=self.padYIn)
            self.buttonFile = Button(
                self.frameFile, text="Find source code...", command=lambda: self.openPath(optFile, self.vFile)
            )
            self.buttonFile.pack(fill=X, padx=self.padXIn, pady=self.padYIn)
            self.labelFileInfo = Label(
                self.frameFile, fg=self.infoFG, text="""Source code to compile (file extension .ino)"""
            )
            self.labelFileInfo.pack(fill=X)
            self.frameFile.pack(fill=X, padx=self.padXOut, pady=self.padYOut)

            # BOTTOM side items (reversed order)
        self.frameAbout = Frame(master, cursor="heart")
        self.labelAbout = Label(self.frameAbout, text=COPYRIGHT_TEXT, fg=self.infoFG)
        self.labelAbout.pack(side=LEFT)
        self.buttonAbout = Button(
            self.frameAbout, text="About app...", fg=self.infoFG, command=self.openAboutBox, borderwidth=1
        )
        self.buttonAbout.pack(side=RIGHT)
        self.frameAbout.pack(side=BOTTOM, fill=X, padx=self.padXOut, pady=self.padYOut)

        if self.vAction.get() != "":
            self.buttonContinue = Button(master, text="Continue", command=self.doContinue)
            self.buttonContinue.pack(fill=X, padx=self.padXOut, pady=self.padYOut)
        else:
            if self.verify is False:
                self.buttonVerify = Button(master, text="Verify", command=self.doVerify)
                self.buttonVerify.pack(side=BOTTOM, fill=X, padx=self.padXOut, pady=self.padYOut)
            if self.upload is False:
                self.buttonUpload = Button(master, text="Upload", command=self.doUpload)
                self.buttonUpload.pack(side=BOTTOM, fill=X, padx=self.padXOut, pady=self.padYOut)

    def openAboutBox(self):
        dialog = AboutDialog(self.master)

    def portSelected(self, P):
        self.errorPort = False
        self.listboxPort.config(bg=self.textBG)
        try:
            porti = map(int, self.listboxPort.curselection())[0]
            self.vPort.set(self.ports[porti][0])
        except (IndexError):
            self.errorPort = True
            self.listboxPort.config(bg=self.errorBG)

            # only for linux

    def validatePort(self, P):
        if self.vPort.get() == "" and P == "":
            self.errorPort = True
            self.entryPort.config(bg=self.errorBG)
            return False
        else:
            self.errorPort = False
            self.entryPort.config(bg=self.textBG)
            return True

    def validatePath(self, P):
        if self.vPath.get() == "" and P == "":
            self.errorPath = True
            self.entryPath.config(bg=self.errorBG)
            return False
        else:
            self.errorPath = False
            self.entryPath.config(bg=self.textBG)
            return True

    def validateBoard(self, P):
        if self.vBoard.get() == "" and P == "":
            self.errorBoard = True
            self.entryBoard.config(bg=self.errorBG)
            return False
        else:
            self.errorBoard = False
            self.entryBoard.config(bg=self.textBG)
            return True

    def validateFile(self, P):
        if self.vFile.get() == "" and P == "":
            self.errorFile = True
            self.entryFile.config(bg=self.errorBG)
            return False
        else:
            self.errorFile = False
            self.entryFile.config(bg=self.textBG)
            return True

    def openPath(self, opt, sv):
        sv.set(tkFileDialog.askopenfilename(**opt))

    def doVerify(self):
        self.vAction.set("--verify")
        self.doContinue()

    def doUpload(self):
        self.vAction.set("--upload")
        self.doContinue()

    def doContinue(self):
        if self.enablePath:
            self.validatePath(self.vPath.get())
        else:
            self.errorPath = False
        if self.enableBoard:
            self.validateBoard(self.vBoard.get())
        else:
            self.errorBoard = False
        if self.enableFile:
            self.validateFile(self.vFile.get())
        else:
            self.errorFile = False
        if self.enablePort and system() != WINDOWS:
            print self.vPort.get()
            self.validatePort(self.vPort.get())
        else:
            self.errorPort = False
        self.doAction()

    def doAction(self):
        result = 3
        if self.errorPath or self.errorBoard or self.errorPort or self.errorFile:
            print "something missing"
            return
        command = '"'
        command += self.vPath.get()
        command += '" ' + self.vAction.get()
        command += " --board " + self.vBoard.get()
        command += " --port " + self.vPort.get()
        command += " --verbose"
        command += ' "' + self.vFile.get()
        command += '"'
        print "command:", command
        print "Please wait ..."
        sys.stdout.flush()
        self.master.destroy()
        p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        output, error = p.communicate()
        print output
        result = p.returncode
Пример #32
0
    def __init__(self, master=None):
        Frame.__init__(self, master)

        self.pack()

        # First row
        f1 = LabelFrame(self,
                        text='NAND file with No$GBA footer',
                        padx=10,
                        pady=10)

        # NAND Button
        self.nand_mode = False

        nand_icon = PhotoImage(
            data=('R0lGODlhEAAQAIMAAAAAADMzM2ZmZpmZmczMzP///wAAAAAAAAA'
                  'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAYALAAAAAAQAB'
                  'AAAARG0MhJaxU4Y2sECAEgikE1CAFRhGMwSMJwBsU6frIgnR/bv'
                  'hTPrWUSDnGw3JGU2xmHrsvyU5xGO8ql6+S0AifPW8kCKpcpEQA7'))

        self.nand_button = Button(f1,
                                  image=nand_icon,
                                  command=self.change_mode,
                                  state=DISABLED)
        self.nand_button.image = nand_icon

        self.nand_button.pack(side='left')

        self.nand_file = StringVar()
        Entry(f1, textvariable=self.nand_file, state='readonly',
              width=40).pack(side='left')

        Button(f1, text='...', command=self.choose_nand).pack(side='left')

        f1.pack(padx=10, pady=10, fill=X)

        # Second row
        f2 = Frame(self)

        # Check box
        self.twilight = IntVar()
        self.twilight.set(1)

        self.chk = Checkbutton(
            f2,
            text='Install latest TWiLight Menu++ on custom firmware',
            variable=self.twilight)

        self.chk.pack(padx=10, anchor=W)

        # NAND operation frame
        self.nand_frame = LabelFrame(f2,
                                     text='NAND operation',
                                     padx=10,
                                     pady=10)

        self.nand_operation = IntVar()
        self.nand_operation.set(0)

        Radiobutton(self.nand_frame,
                    text='Uninstall unlaunch or install v1.4 stable',
                    variable=self.nand_operation,
                    value=0,
                    command=lambda: self.enable_entries(False)).pack(anchor=W)

        Radiobutton(self.nand_frame,
                    text='Remove No$GBA footer',
                    variable=self.nand_operation,
                    value=1,
                    command=lambda: self.enable_entries(False)).pack(anchor=W)

        Radiobutton(self.nand_frame,
                    text='Add No$GBA footer',
                    variable=self.nand_operation,
                    value=2,
                    command=lambda: self.enable_entries(True)).pack(anchor=W)

        fl = Frame(self.nand_frame)

        self.cid_label = Label(fl, text='eMMC CID', state=DISABLED)
        self.cid_label.pack(anchor=W, padx=(24, 0))

        self.cid = StringVar()
        self.cid_entry = Entry(fl,
                               textvariable=self.cid,
                               width=20,
                               state=DISABLED)
        self.cid_entry.pack(anchor=W, padx=(24, 0))

        fl.pack(side='left')

        fr = Frame(self.nand_frame)

        self.console_id_label = Label(fr, text='Console ID', state=DISABLED)
        self.console_id_label.pack(anchor=W)

        self.console_id = StringVar()
        self.console_id_entry = Entry(fr,
                                      textvariable=self.console_id,
                                      width=20,
                                      state=DISABLED)
        self.console_id_entry.pack(anchor=W)

        fr.pack(side='right')

        f2.pack(fill=X)

        # Third row
        f3 = Frame(self)

        self.start_button = Button(f3,
                                   text='Start',
                                   width=16,
                                   command=self.hiya,
                                   state=DISABLED)
        self.start_button.pack(side='left', padx=(0, 5))

        Button(f3, text='Quit', command=root.destroy,
               width=16).pack(side='left', padx=(5, 0))

        f3.pack(pady=(10, 20))

        self.folders = []
        self.files = []
Пример #33
0
    def _init_components(self):
        # group type selection (alternating, classical, sporadic, exceptional)
        group_type_frame = LabelFrame(self, text="Group type")
        group_type_frame.pack(expand=True, fill="x", padx=10, pady=5)

        # group type radio buttons (Alternating, Classical etc.)
        self._group_type = StringVar()
        self._type_radio_buttons = dict()
        for type in ("Alternating", "Classical", "Exceptional", "Sporadic"):
            self._type_radio_buttons[type] = Radiobutton(
                group_type_frame, variable=self._group_type, value=type, text=type
            )
            self._type_radio_buttons[type].pack(anchor="nw", padx=10)

        # set group type selection handler
        self._group_type.trace("w", lambda n, i, m: self._group_type_selection())

        # parameters for each group (degree for alternating, field and
        # dimension for classical etc.
        group_params_frame = LabelFrame(self, text="Parameters")
        group_params_frame.pack(expand=True, fill="x", padx=10, pady=5)

        # alternating
        self._alt_params = Frame(group_params_frame)
        self._alt_params.columnconfigure(1, weight=1)
        Label(self._alt_params, text="Degree").grid(sticky="w")
        self._alt_degree = NumberBox(self._alt_params, constraints=Constraints(min=5))
        self._alt_degree.grid(row=0, column=1, sticky="we")

        # classical
        self._clas_params = Frame(group_params_frame)
        self._clas_params.columnconfigure(1, weight=1)
        Label(self._clas_params, text="Type").grid(row=0, sticky="w")
        self._clas_type = OptionList(self._clas_params, values=ClassicalGroup.types())

        self._clas_type.variable.trace("w", lambda n, i, m: self._classical_group_type_selection())

        self._clas_type.grid(row=0, column=1, sticky="we")

        Label(self._clas_params, text="Dimension").grid(row=1, sticky="w")
        self._clas_dim = NumberBox(self._clas_params)
        self._clas_dim.grid(row=1, column=1, sticky="we")
        Label(self._clas_params, text="Field order").grid(row=2, sticky="w")
        self._clas_field = NumberBox(self._clas_params, constraints=Constraints(primality=numeric.PRIME_POWER))
        self._clas_field.grid(row=2, column=1, sticky="we")

        self._classical_group_type_selection()

        # exceptional
        self._ex_params = Frame(group_params_frame)
        self._ex_params.columnconfigure(1, weight=1)
        Label(self._ex_params, text="Type").grid(row=0, sticky="w")
        self._ex_type = OptionList(self._ex_params, values=ExceptionalGroup.types())
        self._ex_type.setvar(value=ExceptionalGroup.types()[0])
        self._ex_type.grid(row=0, column=1, sticky="we")
        Label(self._ex_params, text="Field order").grid(row=1, sticky="w")
        self._ex_field = NumberBox(self._ex_params, constraints=Constraints(primality=numeric.PRIME_POWER))
        self._ex_field.grid(row=1, column=1, sticky="we")

        # sporadic
        self._spor_params = Frame(group_params_frame)
        self._spor_params.columnconfigure(1, weight=1)
        Label(self._spor_params, text="Group").grid(row=0, sticky="w")
        self._sporadic_group = OptionList(self._spor_params, values=SporadicGroup.all_groups())
        self._sporadic_group.grid(row=0, column=1, sticky="we")

        # pack params frames
        for child_frame in group_params_frame.winfo_children():
            child_frame.pack(expand=True, fill="x", padx=10)
Пример #34
0
    def initUI(self):

        self.parent.title("Caritas")
        self.style = Style()
        self.style.theme_use("default")

        self.pack(fill=BOTH, expand=1)

        frameMenu = Frame(self)
        frameMenu.pack(fill="both", expand="0", side=RIGHT)

        labelBusqueda = LabelFrame(frameMenu, text="Busqueda")
        labelBusqueda.pack(fill="x",expand =1)

        labelVoluntarios = LabelFrame(frameMenu)
        labelVoluntarios.pack(fill="both",expand =0)

        frameTabla = Frame(self)
        frameTabla.pack(fill="both", expand="1", side=LEFT)

        labelTabla = LabelFrame(frameTabla)
        labelTabla.pack(fill="both", expand="1")

        labelBotonera = LabelFrame(frameTabla)
        labelTabla.pack(fill="both", expand="1")

        labelSelect = LabelFrame(frameTabla)
        labelSelect.pack(fill="both", expand="1")

        model = TableModel()
        modelSelect = TableModel()

        model.addColumn("nombre")
        model.addColumn("apellidos")
        model.addColumn("dni")
        model.addColumn("direccion")
        model.addColumn("correo_electronico")
        model.addColumn("estudio")
        model.addColumn("parroquial")
        model.addColumn("proyecto")
        model.addColumn("genero")
        model.addColumn("fecha_nacimiento")
        model.addColumn("telefono_1")
        model.addColumn("telefono_2")

        modelSelect.addColumn("nombre")
        modelSelect.addColumn("apellidos")
        modelSelect.addColumn("dni")
        modelSelect.addColumn("direccion")
        modelSelect.addColumn("correo_electronico")
        modelSelect.addColumn("estudio")
        modelSelect.addColumn("parroquial")
        modelSelect.addColumn("proyecto")
        modelSelect.addColumn("genero")
        modelSelect.addColumn("fecha_nacimiento")
        modelSelect.addColumn("telefono_1")
        modelSelect.addColumn("telefono_2")

        #Tabla Voluntarios
        self.listilla= queryAllVoluntarios()
        model.importDict(self.listilla)
        self.table = TableCanvas(labelTabla, model=model,editable=False)
        self.table.createTableFrame()
        self.table.handle_double_click(self.eventoClic)

        #Tabla Seleccionados
        self.selectTable = TableCanvas(labelSelect, model=modelSelect,editable=False)
        self.selectTable.createTableFrame()
        self.listadoSeleccionado = []

        L1 = Label(labelBusqueda, text="Nombre")
        L1.pack()
        E1 = Entry(labelBusqueda)
        E1.pack()

        L2 = Label(labelBusqueda, text="Apellidos")
        L2.pack()
        E2 = Entry(labelBusqueda)
        E2.pack()

        botonArriba = Button(labelVoluntarios, text="Agregar al listado",  command=lambda:self.agregarListado(self.table.getSelectedRow()))
        botonArriba.pack()
        botonAbajo = Button(labelVoluntarios, text="Quitar del listado",  command=lambda:self.quitarListado(self.selectTable.getSelectedRow()))
        botonAbajo.pack()

        button = Button(labelBusqueda, text="Buscar", command=lambda: self.buscar(E1.get(),E2.get()))
        button.pack()

        button = Button(labelVoluntarios, text="Nuevo Voluntario",  command=lambda:self.ventanaVoluntarios(-1))
        button.pack()

        buttonEditar = Button(labelVoluntarios, text="Editar Voluntario",  command=lambda:self.ventanaVoluntarios(self.table.getSelectedRow()))
        buttonEditar.pack()

        buttonImprimir = Button(labelVoluntarios, text="Imprimir",  command=lambda:self.ventanaImprimir())
        buttonImprimir.pack()
Пример #35
0
class Facade(Frame):
    """This is a Frame that contains group info, group order, apex and prime
    graph.
    """
    def __init__(self, parent, group, show_graph=True, graph_class=None, **kw):
        """
        Parameters:
            show_graph: whether to create and show graph instantly or provide a button to do that lately
            graph_factory: callable accepting one argument - the Group instance and returning Graph instance. Note that
                __str__ method of the callable is used in the UI.
        """
        Frame.__init__(self, parent, **kw)
        self._group = group
        #        self._show_apex = True
        self._show_graph = show_graph
        self._graph_class = graph_class
        self._init_variables()
        self._init_menu()
        self._init_components()

    @property
    def group(self):
        return self._group

    @property
    def apex_list_container(self):
        return self._apex_container

    @property
    def graph_canvas(self):
        return self._graph_canvas

    def _show_graph_canvas(self):
        self._show_graph_button.forget()
        # TODO: add different layouts and other options
        graph_class = self._graph_class
        self.graph = graph_class(self._group)
        self._graph_canvas = GraphCanvas(self._right_pane,
                                         SpringLayout(self.graph),
                                         caption=str(graph_class))
        self._graph_canvas.pack(expand=True, fill='both')

        self._graph_canvas.vertex_label_mode = self.getvar(
            name=self.winfo_name() + ".vertexlabelposition")

        self._iterations_plugin = IterationsPlugin()
        self._iterations_plugin.apply(self._graph_canvas)

        self.update_layout()

    def _init_components(self):
        self._panes = PanedWindow(self,
                                  orient='horizontal',
                                  sashrelief='raised')
        self._panes.pack(expand=True, fill='both')

        self._left_pane = Frame(self._panes, padx=2, pady=2)
        self._right_pane = Frame(self._panes)
        self._panes.add(self._left_pane, width=250)
        self._panes.add(self._right_pane)

        # group name
        group_name_pane = LabelFrame(self._left_pane,
                                     text="Group",
                                     padx=10,
                                     pady=5)
        group_name_pane.pack(fill='x')

        self._group_name = GroupNameLabel(group_name_pane, self._group)
        self._group_name.pack(expand=True, fill='both')

        # group order
        group_order_pane = LabelFrame(self._left_pane,
                                      text="Order",
                                      padx=10,
                                      pady=5)
        group_order_pane.pack(fill='x')

        self._group_order = IntegerContainer(group_order_pane,
                                             integer=self._group.order())
        self._group_order.pack(expand=True, fill='both')

        # apex
        self._apex_pane = LabelFrame(self._left_pane,
                                     text="Apex",
                                     padx=10,
                                     pady=5)
        self._apex_pane.pack(expand=True, fill='both')

        self._apex_container = ApexListContainer(self._apex_pane,
                                                 apex=self._group.apex())
        self._apex_container.pack(expand=True, fill='both')

        # graph controls
        cocliques_frame = LabelFrame(self._left_pane,
                                     text="Cocliques",
                                     padx=10,
                                     pady=5)
        cocliques_frame.pack(fill='x')

        self._cocliques_button = Button(cocliques_frame,
                                        text="Calculate",
                                        command=self._show_cocliques)
        self._cocliques_button.pack(anchor='nw')

        self._cocliques_container = ListContainer(cocliques_frame)
        self._cocliques_list = Listbox(self._cocliques_container)
        self._cocliques_container.set_listbox(self._cocliques_list)

        # Button(graph_controls, text='Group equivalent vertices').pack(anchor='nw')

        # this is a button that show up instead of graph canvas if we uncheck 'Show graph' checkbox.
        self._show_graph_button = Button(self._right_pane,
                                         text='Show graph',
                                         command=self._show_graph_canvas)
        self._graph_canvas = None
        if self._show_graph:
            self._show_graph_canvas()
        else:
            self._show_graph_button.pack()

    def _init_variables(self):
        def set_default_var(self, name):
            """Sets widget-specific var with same value as root.
            """
            default_var = self.getvar(name)
            local_var_name = self.winfo_name() + "." + name
            self.setvar(local_var_name, default_var)
            return local_var_name

        local_name = set_default_var(self, "vertexlabelposition")
        tools.trace_variable(self, local_name, "w",
                             self._change_vertex_label_position)

    def _change_vertex_label_position(self, name, *arg):
        # override default value
        self.setvar("vertexlabelposition", self.getvar(name))
        if self._graph_canvas is not None:
            self._graph_canvas.vertex_label_mode = self.getvar(name)

    def _init_menu(self):
        """Init menu bar content.
        """
        toplevel = self.winfo_toplevel()
        if toplevel['menu']:
            self._menu = self.nametowidget(name=toplevel['menu'])
        else:
            self._menu = Menu(toplevel)
            toplevel['menu'] = self._menu

        graph_options = Menu(self._menu, tearoff=0)
        self._menu.add_cascade(label="Graph", menu=graph_options)
        self._menu_index = self._menu.index("end")

        vertex_label_position_menu = Menu(graph_options, tearoff=0)
        graph_options.add_cascade(label="Label position",
                                  menu=vertex_label_position_menu)

        menu_var = self.winfo_name() + ".vertexlabelposition"
        vertex_label_position_menu.add_radiobutton(variable=menu_var,
                                                   label="Auto",
                                                   value="auto")
        vertex_label_position_menu.add_radiobutton(variable=menu_var,
                                                   label="Center",
                                                   value="center")

        graph_options.add_command(label="Save graph...",
                                  command=self.call_graph_save_dialog)

        self.bind("<Destroy>", self.__destroy_menu)

    #noinspection PyUnusedLocal
    def __destroy_menu(self, event):
        try:
            self._menu.delete(self._menu_index)
        except TclError:
            pass

    def _show_cocliques(self):
        cocliques = self.graph.max_cocliques()

        def select_coclique(*_):
            index = next(iter(self._cocliques_list.curselection()), None)
            if index is not None:
                selected = cocliques[int(index)]
                pick_state = self._graph_canvas.picked_vertex_state
                pick_state.clear()
                for value in selected:
                    pick_state.pick(self._graph_canvas.get_vertex(value))

        self._cocliques_list.insert(
            0, *[', '.join(map(str, coclique)) for coclique in cocliques])
        self._cocliques_list.bind("<Double-Button-1>", select_coclique)

        self._cocliques_button.forget()
        self._cocliques_container.pack(expand=True, fill='both')

    def call_graph_save_dialog(self):
        file_name = tkFileDialog.asksaveasfilename(
            defaultextension='.ps',
            filetypes=[('PostScript', '.ps')],
            parent=self.winfo_toplevel(),
            title="Save graph as image")
        if file_name:
            with codecs.open(file_name, 'w', encoding='utf-8') as f:
                f.write(self._graph_canvas.postscript())

    def update_layout(self):
        try:
            self._iterations_plugin.iterate(50)
        except AttributeError:
            pass
Пример #36
0
    def __init__(self, statement, entry):
        """
            instantiate a transaction window
        """
        self.rules = statement.rules

        self.root = Tk()
        self.root.title("Manual Annotation")
        t = Frame(self.root, bd=2 * self.BORDER)

        # top stack: input file name
        f = Frame(t)
        caption = "File: " + statement.filename + ", line: " + str(statement.file_line)
        Label(f, text=caption).pack()
        f.pack(pady=self.PADDING)

        # middle stack: entry details
        f = Frame(t)
        f1 = LabelFrame(f, text="Date")
        self.date = Label(f1, text=entry.date)
        self.date.pack(padx=self.PADDING, pady=self.PADDING)
        f1.pack(side=LEFT, padx=self.PADDING)

        f1 = LabelFrame(f, text="Amount")
        self.amount = Label(f1, text=entry.amount)
        self.amount.pack(padx=self.PADDING, pady=self.PADDING)
        f1.pack(side=LEFT, padx=self.PADDING)

        f1 = LabelFrame(f, text="Account")
        self.acct = Text(f1, height=1, width=self.ACCT_WID)
        if entry.account is not None:
            self.acct.insert(END, entry.account)
        self.acct.pack(padx=self.PADDING, pady=self.PADDING)
        f1.pack(side=LEFT, padx=self.PADDING)

        f1 = LabelFrame(f, text="Description")
        self.desc = Text(f1, height=1, width=self.DESC_WID)
        self.desc.insert(END, entry.description)
        self.desc.pack(padx=self.PADDING, pady=self.PADDING)
        f1.pack(side=LEFT, padx=self.PADDING)
        f.pack(pady=self.PADDING)

        # bottom stack: action buttons
        f = Frame(t)
        b = Button(f, text="Accept", command=self.accept)
        b.pack(side=LEFT, padx=self.PADDING)

        # account selection menu
        self.account = StringVar(f)
        self.account.set(entry.account)
        m = OptionMenu(f, self.account, *sorted(statement.acc_list), command=self.chooseAcct)
        m.pack(side=LEFT, padx=self.PADDING)

        # aggregate description selection menu
        self.description = StringVar(f)
        self.menu = OptionMenu(f, self.description, *sorted(statement.agg_list), command=self.chooseDesc)
        self.menu.pack(side=LEFT, padx=self.PADDING)

        b = Button(f, text="Delete", command=self.delete)
        b.pack(side=LEFT, padx=self.PADDING)
        f.pack(padx=self.PADDING, pady=self.PADDING)

        # finalize
        t.pack(side=TOP)
        self.entry = entry  # default: return what we got
Пример #37
0
    def _init_components(self):
        self._panes = PanedWindow(self,
                                  orient='horizontal',
                                  sashrelief='raised')
        self._panes.pack(expand=True, fill='both')

        self._left_pane = Frame(self._panes, padx=2, pady=2)
        self._right_pane = Frame(self._panes)
        self._panes.add(self._left_pane, width=250)
        self._panes.add(self._right_pane)

        # group name
        group_name_pane = LabelFrame(self._left_pane,
                                     text="Group",
                                     padx=10,
                                     pady=5)
        group_name_pane.pack(fill='x')

        self._group_name = GroupNameLabel(group_name_pane, self._group)
        self._group_name.pack(expand=True, fill='both')

        # group order
        group_order_pane = LabelFrame(self._left_pane,
                                      text="Order",
                                      padx=10,
                                      pady=5)
        group_order_pane.pack(fill='x')

        self._group_order = IntegerContainer(group_order_pane,
                                             integer=self._group.order())
        self._group_order.pack(expand=True, fill='both')

        # apex
        self._apex_pane = LabelFrame(self._left_pane,
                                     text="Apex",
                                     padx=10,
                                     pady=5)
        self._apex_pane.pack(expand=True, fill='both')

        self._apex_container = ApexListContainer(self._apex_pane,
                                                 apex=self._group.apex())
        self._apex_container.pack(expand=True, fill='both')

        # graph controls
        cocliques_frame = LabelFrame(self._left_pane,
                                     text="Cocliques",
                                     padx=10,
                                     pady=5)
        cocliques_frame.pack(fill='x')

        self._cocliques_button = Button(cocliques_frame,
                                        text="Calculate",
                                        command=self._show_cocliques)
        self._cocliques_button.pack(anchor='nw')

        self._cocliques_container = ListContainer(cocliques_frame)
        self._cocliques_list = Listbox(self._cocliques_container)
        self._cocliques_container.set_listbox(self._cocliques_list)

        # Button(graph_controls, text='Group equivalent vertices').pack(anchor='nw')

        # this is a button that show up instead of graph canvas if we uncheck 'Show graph' checkbox.
        self._show_graph_button = Button(self._right_pane,
                                         text='Show graph',
                                         command=self._show_graph_canvas)
        self._graph_canvas = None
        if self._show_graph:
            self._show_graph_canvas()
        else:
            self._show_graph_button.pack()
Пример #38
0
class Message(Show_style):
    def __init__(self, master=None):
        Show_style.__init__(self, master)
        self.add_status()
        self.create_widget()
        self.pack_all()

    def create_widget(self):
        self.create_main_frame()

    def create_main_frame(self):
        self.main_labelframe = LabelFrame(self, text='消息中心')
        self.main_list_item = (('业务编号', 10), ('客户编号', 8), ('客户名称', 20),
                               ('发放日', 10), ('到期日', 10), ('贷款金额', 5),
                               ('产品名称', 10), ('期限', 5), ('利率', 8), ('申请状态',
                                                                    14))
        self.main_list = MultiListbox(self.main_labelframe,
                                      self.main_list_item,
                                      height=22)
        self.main_list.grid(padx=10, pady=10, row=0, column=0)

        self.check_button = Button(self.main_labelframe, text='察看')

        def check_func():
            apply_information = self.get_mutilistbox_choose()
            if not apply_information:
                MessageBox('当前申请', '请先选中一个申请消息')
                return
            self.apply_information_toplevel = ApplyInformationToplevel(
                self, apply_information)

        self.check_button['command'] = check_func
        self.check_button.grid(pady=10, row=1, column=0)

    def get_mutilistbox_choose(self):
        now = self.main_list.curselection()
        if not now:
            return None
        else:
            print 'now', self.main_list.get(now)
            number = self.main_list.get(now)[0]
            #return const.apply_information_list[int(now[0])]
            for apply_information in const.apply_information_list:
                if apply_information[15] == number:
                    return apply_information

    def refresh_mutilistbox(self):
        self.main_list.delete(0, self.main_list.size())
        self.add_item()

    def add_item(self):
        apply_list = show_apply_list()
        for p in apply_list:
            now_state = int(p[-1])
            if now_state >= 5:
                p[-1] = '审核通过'
            elif now_state > int(const.user_type):
                p[-1] = '等待上级审核'
            elif now_state == int(const.user_type):
                p[-1] = '等待当前用户审核'
            elif now_state < int(const.user_type):
                continue
            self.main_list.insert(Tkinter.END, p)

    def pack_all(self):
        self.main_labelframe.pack()
Пример #39
0
    def initUI(self):

        self.parent.title("IAF CALC 0.01")
        self.pack(fill=BOTH, expand=1)

        self.configure(background="white")

        frameTOP = Frame(self)
        frameTOP.config(bg="white")
        frameTOP.pack(side=TOP)

        frameFILES = Frame(frameTOP)
        frameFILES.pack(side=LEFT, padx=10)

        # --- BUTTON FOR FILE 1 --- #
        frameF1 = LabelFrame(frameFILES, text="Eyes open file:", relief=FLAT, borderwidth=1, background="white")
        frameF1.pack(fill=X, expand=1)
        self.nameF1 = Entry(frameF1, width=50)
        self.nameF1.config(bg="lightgray")
        self.nameF1.pack(side=LEFT)
        self.nameF1.delete(0, END)
        self.nameF1.insert(0, "")
        self.buttonLoadFile1 = Button(frameF1, text="...", command=self.askOpenFile1)
        self.buttonLoadFile1.pack(side=LEFT, padx=5, pady=5)
        # ----------------------- #

        # --- BUTTON FOR FILE 2 --- #
        frameF2 = LabelFrame(frameFILES, text="Eyes closed file:", relief=FLAT, borderwidth=1, background="white")
        frameF2.pack(fill=X, expand=1)
        self.nameF2 = Entry(frameF2, width=50)
        self.nameF2.config(bg="lightgray")
        self.nameF2.pack(side=LEFT)
        self.nameF2.delete(0, END)
        self.nameF2.insert(0, "")
        self.buttonLoadFile2 = Button(frameF2, text="...", command=self.askOpenFile2)
        self.buttonLoadFile2.pack(side=LEFT, padx=5, pady=5)
        # ----------------------- #

        # --- BUTTON FOR FILE OUTPUT --- #
        frameO = LabelFrame(frameFILES, text="Output directory:", relief=FLAT, borderwidth=1, background="white")
        frameO.pack(fill=X, expand=1)
        self.nameO = Entry(frameO, width=50)
        self.nameO.config(bg="lightgray")
        self.nameO.pack(side=LEFT)
        self.nameO.delete(0, END)
        self.nameO.insert(0, "")
        self.buttonSelectOutput = Button(frameO, text="...", command=self.askOutputDirectory)
        self.buttonSelectOutput.pack(side=LEFT, padx=5, pady=5)
        # -------------------------------#
        # self.pack()
        # self.pack(fill=Y, expand=1)

        # ---------- PSD PARAMETER SELECTION ---------- #
        framePARAM = Frame(frameTOP)
        framePARAM.config(bg="white")
        framePARAM.pack(side=LEFT, fill=X)

        frame = LabelFrame(framePARAM, text="PSD Parameters", relief=RIDGE, borderwidth=1, background="white")
        frame.pack(fill=BOTH, expand=1, side=TOP)

        wFs = Label(frame, text="Fs:", bg="white")
        wFs.pack(side=LEFT)
        self.inputFs = Entry(frame, width=5)
        self.inputFs.pack(side=LEFT, padx=5)
        self.inputFs.delete(0, END)
        self.inputFs.insert(0, "500")

        wWS = Label(frame, text="Window size:", bg="white")
        wWS.pack(side=LEFT)
        self.inputWinSize = Entry(frame, width=5)
        self.inputWinSize.pack(side=LEFT, padx=5)
        self.inputWinSize.delete(0, END)
        self.inputWinSize.insert(0, "1024")

        wOL = Label(frame, text="Overlap:", bg="white")
        wOL.pack(side=LEFT)
        self.inputOverlap = Entry(frame, width=5)
        self.inputOverlap.pack(side=LEFT, padx=5)
        self.inputOverlap.delete(0, END)
        self.inputOverlap.insert(0, "512")

        wWT = Label(frame, text="Window function:", bg="white")
        wWT.pack(side=LEFT)

        variable = StringVar(frame)
        variable.set("Hamming")  # default value
        self.inputWinType = OptionMenu(frame, variable, "Hamming", "Bartlett", "Blackman", "Hanning", "None")
        self.inputWinType.config(bg="white", width=10)
        self.inputWinType.pack(side=LEFT)

        buttonRun = Button(frame, text="GO!", command=self.goTime)
        buttonRun.pack(side=RIGHT)

        # Channel selector
        frameCh = LabelFrame(framePARAM, text="Channels", relief=RIDGE, borderwidth=1, background="white")
        frameCh.pack(fill=BOTH, expand=1, side=TOP)

        self.EOch1 = IntVar()
        self.inputEOch1 = Checkbutton(frameCh, text="1", variable=self.EOch1, bg="white")
        self.inputEOch1.pack(side=LEFT)

        self.EOch2 = IntVar()
        self.inputEOch2 = Checkbutton(frameCh, text="2", variable=self.EOch2, bg="white")
        self.inputEOch2.pack(side=LEFT)

        self.EOch3 = IntVar()
        self.inputEOch3 = Checkbutton(frameCh, text="3", variable=self.EOch3, bg="white")
        self.inputEOch3.pack(side=LEFT)

        self.EOch4 = IntVar()
        self.inputEOch4 = Checkbutton(frameCh, text="4", variable=self.EOch4, bg="white")
        self.inputEOch4.pack(side=LEFT)

        self.EOch5 = IntVar()
        self.inputEOch5 = Checkbutton(frameCh, text="5", variable=self.EOch5, bg="white")
        self.inputEOch5.pack(side=LEFT)

        self.EOch6 = IntVar()
        self.inputEOch6 = Checkbutton(frameCh, text="6", variable=self.EOch6, bg="white")
        self.inputEOch6.pack(side=LEFT)

        self.EOch7 = IntVar()
        self.inputEOch7 = Checkbutton(frameCh, text="7", variable=self.EOch7, bg="white")
        self.inputEOch7.pack(side=LEFT)

        self.EOch8 = IntVar()
        self.inputEOch8 = Checkbutton(frameCh, text="8", variable=self.EOch8, bg="white")
        self.inputEOch8.pack(side=LEFT)

        # IAF Calculation parameters

        frameIAF = LabelFrame(framePARAM, text="IAF Search Limits", relief=RIDGE, borderwidth=1, background="white")
        frameIAF.pack(fill=BOTH, expand=1, side=TOP)

        labelLowBound = Label(frameIAF, text="Lower limit (Hz):", bg="white")
        labelLowBound.pack(side=LEFT)
        self.inputLowBound = Entry(frameIAF, width=5)
        self.inputLowBound.pack(side=LEFT, padx=5)
        self.inputLowBound.delete(0, END)
        self.inputLowBound.insert(0, "7")

        labelUpBound = Label(frameIAF, text="Upper limit (Hz):", bg="white")
        labelUpBound.pack(side=LEFT)
        self.inputUpBound = Entry(frameIAF, width=5)
        self.inputUpBound.pack(side=LEFT, padx=5)
        self.inputUpBound.delete(0, END)
        self.inputUpBound.insert(0, "14")

        self.GaussVar = IntVar()
        self.inputGauss = Checkbutton(frameIAF, text="Gauss", variable=self.GaussVar, bg="white")
        self.inputGauss.pack(side=LEFT)

        buttonRun = Button(frameIAF, text="IAF!", command=self.calculateIAF)
        buttonRun.pack(side=RIGHT)

        self.pack()

        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # END OF TOP FRAME
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

        # my variables
        self.chSelect = 0
        self.chOther = 0

        self.P1 = ndarray(1)
        self.f1 = ndarray(1)

        self.P2 = ndarray(1)
        self.f2 = ndarray(1)

        self.filename1 = "..."
        self.filename2 = "..."

        self.IAF = 10

        self.doGauss = True
        # FIGURE STUFF !!!
        self.Pmax = 0
        self.Pmin = 0
        self.Dmax = 0
        self.Dmin = 0

        frameBOTTOM = Frame(self)
        frameBOTTOM.config(bg="white")
        frameBOTTOM.pack(side=BOTTOM, pady=10)

        frameFig = LabelFrame(frameBOTTOM, text="Spectrum", relief=RIDGE, borderwidth=1, background="white")
        frameFig.pack(fill=X, expand=1, side=LEFT, padx=10)

        self.fig1 = matplotlib.figure.Figure(figsize=(7, 3), dpi=100)  # ,frameon=False)
        self.fig1.set_facecolor("white")
        self.fig = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg(self.fig1, master=frameFig)
        self.a1 = self.fig1.add_subplot(121)
        self.a2 = self.fig1.add_subplot(122)
        self.fig.show()
        self.fig.get_tk_widget().pack(side=BOTTOM)

        frameConfig = LabelFrame(
            frameBOTTOM, text="Filter configuration", relief=RAISED, borderwidth=1, background="white"
        )
        frameConfig.pack(fill=BOTH, expand=1, side=RIGHT, padx=10)

        frameIAF = LabelFrame(frameConfig, text="Individual Alpha Frequency (IAF)")
        frameIAF.config(bg="white")
        frameIAF.pack(expand=1, side=TOP, padx=10)

        self.inputIAF = Entry(frameIAF, width=5)
        self.inputIAF.pack(side=LEFT, padx=5)
        self.inputIAF.delete(0, END)
        self.inputIAF.insert(0, "0")

        self.buttonWriteDefault = Button(frameIAF, text="Update Filters", command=self.updateFilters)
        self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5)

        frameFilters = LabelFrame(frameConfig, text="Filters", relief=RAISED, borderwidth=1, background="white")
        frameFilters.pack(fill=X, expand=1, side=TOP)

        # THETA FRAME
        frameTheta = LabelFrame(frameFilters, text="Theta", relief=RAISED, borderwidth=1, background="white")
        frameTheta.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputThetaLow = Entry(frameTheta, width=8)
        self.inputThetaLow.pack(side=LEFT, padx=5, pady=5)
        self.inputThetaLow.delete(0, END)
        self.inputThetaLow.insert(0, "0")

        self.inputThetaHigh = Entry(frameTheta, width=8)
        self.inputThetaHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputThetaHigh.delete(0, END)
        self.inputThetaHigh.insert(0, "0")

        # BETA FRAME
        frameBeta = LabelFrame(frameFilters, text="Beta", relief=RAISED, borderwidth=1, background="white")
        frameBeta.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputBetaLow = Entry(frameBeta, width=8)
        self.inputBetaLow.pack(side=LEFT, padx=5, pady=5)
        self.inputBetaLow.delete(0, END)
        self.inputBetaLow.insert(0, "0")

        self.inputBetaHigh = Entry(frameBeta, width=8)
        self.inputBetaHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputBetaHigh.delete(0, END)
        self.inputBetaHigh.insert(0, "0")

        # SMR FRAME
        frameSMR = LabelFrame(frameFilters, text="SMR", relief=RAISED, borderwidth=1, background="white")
        frameSMR.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputSMRLow = Entry(frameSMR, width=8)
        self.inputSMRLow.pack(side=LEFT, padx=5, pady=5)
        self.inputSMRLow.delete(0, END)
        self.inputSMRLow.insert(0, "0")

        self.inputSMRHigh = Entry(frameSMR, width=8)
        self.inputSMRHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputSMRHigh.delete(0, END)
        self.inputSMRHigh.insert(0, "0")

        frameButtons = LabelFrame(frameConfig, text="Commands", relief=RAISED, borderwidth=1, background="white")
        frameButtons.pack(expand=1, side=BOTTOM)

        self.buttonWriteConfig = Button(frameButtons, text="Write Filters", command=self.writeFilters)
        self.buttonWriteConfig.pack(side=LEFT, padx=5, pady=5)

        self.buttonWriteDefault = Button(frameButtons, text="Reset to Defaults", command=self.resetIAFtoDefault)
        self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5)

        # self.buttonVisualize = Button(frameButtons, text="VIS",command=self.resetIAFtoDefault)
        # self.buttonVisualize.pack(side=LEFT,padx=5,pady=5)

        self.buttonPrintFig = Button(frameButtons, text="Print Figure", command=self.printFigureToFile)
        self.buttonPrintFig.pack(side=LEFT, padx=5, pady=5)
Пример #40
0
class BoardConfig(Frame):
    def __init__(self, master=None, main=None):
        Frame.__init__(self, master)

        self.parent = master
        self.main = main

        self.parent.geometry("336x424")
        self.parent.title(os.getenv("NAME") + " - Board Config")
        self.master.configure(padx=10, pady=10)

        self.intvar = IntVar()

        #Arch
        self.arch_var = IntVar()
        lf_arch = LabelFrame(self.parent, text="Architecture")
        lf_arch.pack(fill=X, expand=True, side=TOP)

        frame_arch = Frame(lf_arch)
        frame_arch.pack(fill=X, expand=True, side=TOP)

        frame_left1 = Frame(frame_arch)
        frame_left1.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right1 = Frame(frame_arch)
        frame_right1.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_arch_8 = Radiobutton(frame_left1,
                                              text="8-bit ",
                                              anchor="w",
                                              width=10,
                                              value=8,
                                              variable=self.arch_var,
                                              command=self.update_mode)
        self.radioButton_arch_8.pack(fill=X, side=TOP)

        self.radioButton_arch_32 = Radiobutton(frame_right1,
                                               text="32-bit",
                                               anchor="w",
                                               width=10,
                                               value=32,
                                               variable=self.arch_var,
                                               command=self.update_mode)
        self.radioButton_arch_32.pack(fill=X, side=TOP)

        #Mode
        self.mode_var = StringVar()
        lf_mode = LabelFrame(self.parent, text="Programming mode")
        lf_mode.pack(fill=X, expand=True, side=TOP)

        frame_mode = Frame(lf_mode)
        frame_mode.pack(fill=X, expand=True, side=TOP)

        frame_left2 = Frame(frame_mode)
        frame_left2.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right2 = Frame(frame_mode)
        frame_right2.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_mode_icsp = Radiobutton(frame_left2,
                                                 text="ICSP",
                                                 anchor="w",
                                                 width=10,
                                                 value="icsp",
                                                 variable=self.mode_var,
                                                 command=self.update_mode)
        self.radioButton_mode_icsp.pack(side=TOP, fill=X)

        self.radioButton_mode_bootloader = Radiobutton(
            frame_right2,
            text="Bootloader",
            anchor="w",
            width=10,
            value="bootloader",
            variable=self.mode_var,
            command=self.update_mode)
        self.radioButton_mode_bootloader.pack(side=TOP, fill=X)

        #Bootloader
        self.boot_var = StringVar()
        self.lf_boot = LabelFrame(self.parent, text="Bootloader")
        self.lf_boot.pack(fill=X, expand=True, side=TOP)

        frame_boot = Frame(self.lf_boot)
        frame_boot.pack(fill=X, expand=True, side=TOP)

        frame_left3 = Frame(frame_boot)
        frame_left3.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right3 = Frame(frame_boot)
        frame_right3.pack(expand=True, fill=BOTH, side=RIGHT)

        self.radioButton_bootloader_v1_v2 = Radiobutton(frame_left3,
                                                        text="v1.x or v2.x",
                                                        anchor="w",
                                                        width=10,
                                                        value="v1_v2",
                                                        variable=self.boot_var)
        self.radioButton_bootloader_v1_v2.pack(fill=X, side=TOP, expand=True)
        self.radioButton_bootloader_v4 = Radiobutton(frame_right3,
                                                     text="v4.x",
                                                     anchor="w",
                                                     width=10,
                                                     value="v4",
                                                     variable=self.boot_var)
        self.radioButton_bootloader_v4.pack(fill=X, side=TOP, expand=True)

        #Devices 8bit
        self.dev8_var = StringVar()
        self.lf_dev8 = LabelFrame(self.parent, text="Devices")
        self.lf_dev8.pack(fill=X, expand=True, side=TOP)

        self.frame_8b = Frame(self.lf_dev8)
        self.frame_8b.pack(fill=X, expand=True, side=TOP)

        #Devices 32bit
        self.dev32_var = StringVar()
        self.lf_dev32 = LabelFrame(self.parent, text="Devices")
        self.lf_dev32.pack(fill=X, expand=True, side=TOP)

        self.frame_32b = Frame(self.lf_dev32)
        self.frame_32b.pack(fill=X, expand=True, side=TOP)

        frame_buttons = Frame(self.parent)
        Button(frame_buttons, text="Accept",
               command=self.accept_config).pack(fill=X,
                                                expand=True,
                                                side=RIGHT)
        Button(frame_buttons, text="Cancel",
               command=self.quit).pack(fill=X, expand=True, side=LEFT)
        frame_buttons.pack(fill=X, expand=True, side=BOTTOM)

        frame_advance = Frame(self.parent)
        self.advanceoptions = Button(frame_advance,
                                     text="Advance options",
                                     command=self.advance)
        self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM)
        frame_advance.pack(fill=X, expand=True, side=BOTTOM)

        frame_warning = Frame(self.parent)
        self.label_warning = Label(frame_warning,
                                   fg="red",
                                   text="warning!",
                                   anchor="w")
        self.label_warning.pack(fill=X, expand=True, side=BOTTOM)
        frame_warning.pack(fill=X, expand=True, side=BOTTOM)

        self.build_devices_arch()
        self.load_config()
        self.init_groups()

    #----------------------------------------------------------------------
    def quit(self):

        self.master.destroy()

    #----------------------------------------------------------------------
    def build_devices_arch(self):

        #8bits
        name_checked = self.main.configIDE.config("Board", "board_8",
                                                  "Pinguino 2550")
        arch_8 = filter(lambda board: board.arch == 8,
                        self.main.pinguinoAPI._boards_)
        arch_8.sort()

        frame_left = Frame(self.frame_8b)
        frame_left.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right = Frame(self.frame_8b)
        frame_right.pack(expand=True, fill=BOTH, side=RIGHT)

        parent = frame_left  #left
        for board in arch_8:
            if arch_8.index(board) == (len(arch_8) / 2) + 1:
                parent = frame_right  #rigth

            radio = Radiobutton(
                parent,
                text=board.name,
                anchor="w",
                width=10,
                value=board.name,
                variable=self.dev8_var,
                command=lambda: self.set_board_name(board.name, "8"))
            radio.pack(expand=True, fill=X, side=TOP)

            #radio = QtGui.QRadioButton(self.board_config.groupBox_devices_8)
            #self.board_config.gridLayout_device_8.addWidget(radio, count, side, 1, 1)
            #radio.setText(board.name)
            #radio.setToolTip(board.proc)

            if name_checked == board.name: radio.select()
            #self.connect(radio, QtCore.SIGNAL("clicked()"), self.set_board_name(board.name, "8"))

        #32bits
        name_checked = self.main.configIDE.config("Board", "board_32",
                                                  "PIC32 Pinguino OTG")
        arch_32 = filter(lambda board: board.arch == 32,
                         self.main.pinguinoAPI._boards_)
        arch_32.sort()

        frame_left0 = Frame(self.frame_32b)
        frame_left0.pack(expand=True, fill=BOTH, side=LEFT)

        frame_right0 = Frame(self.frame_32b)
        frame_right0.pack(expand=True, fill=BOTH, side=RIGHT)

        parent = frame_left0  #left
        for board in arch_32:
            if arch_32.index(board) == (len(arch_32) / 2) + 1:
                parent = frame_right0  #rigth

            radio = Radiobutton(
                parent,
                text=board.name,
                anchor="w",
                width=10,
                value=board.name,
                variable=self.dev32_var,
                command=lambda: self.set_board_name(board.name, "32"))
            radio.pack(expand=True, fill=X, side=TOP)

            #radio = QtGui.QRadioButton(self.board_config.groupBox_devices_32)
            #self.board_config.gridLayout_device_32.addWidget(radio, count, side, 1, 1)
            #radio.setText(board.name)
            #radio.setToolTip(board.proc)

            if name_checked == board.name: radio.select()
            #self.connect(radio, QtCore.SIGNAL("clicked()"), self.set_board_name(board.name, "32"))

    #----------------------------------------------------------------------
    def load_config(self):

        self.main.configIDE.load_config()

        arch = self.main.configIDE.config("Board", "arch", 8)
        getattr(self.radioButton_arch_8, "select" if
                (arch == 8) else "deselect")()
        getattr(self.radioButton_arch_32, "select" if
                (arch == 32) else "deselect")()

        if arch == 32:
            self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM)
        else:
            self.advanceoptions.forget()

        mode = self.main.configIDE.config("Board", "mode", "bootloader")
        getattr(self.radioButton_mode_bootloader, "select" if
                (mode == "bootloader") else "deselect")()
        getattr(self.radioButton_mode_icsp, "select" if
                (mode == "icsp") else "deselect")()

        bootloader = self.main.configIDE.config("Board", "bootloader", "v1_v2")
        getattr(self.radioButton_bootloader_v1_v2, "select" if
                (bootloader == "v1_v2") else "deselect")()
        getattr(self.radioButton_bootloader_v4, "select" if
                (bootloader == "v4") else "deselect")()

        self.update_mode()

    #----------------------------------------------------------------------
    def update_mode(self):

        mode_boot = self.mode_var.get() == "bootloader"
        arch_8 = self.arch_var.get() == 8

        if mode_boot and arch_8:
            self.lf_boot.pack(fill=X, expand=True, side=TOP)
        else:
            self.lf_boot.forget()
        self.init_groups()

        if not mode_boot:
            self.label_warning.configure(
                text="WARNING!! this mode can overwite the bootloader code.")
        else:
            self.label_warning.configure(text="")

    #----------------------------------------------------------------------
    def set_board_name(self, name, arch):
        def dummy():
            self.main.configIDE.set("Board", "board_" + arch, name)

        return dummy

    #----------------------------------------------------------------------
    def init_groups(self):

        self.lf_dev32.forget()
        self.lf_dev8.forget()

        if self.arch_var.get() == 8:
            self.lf_dev8.pack(fill=X, expand=True, side=TOP)
            self.advanceoptions.forget()

        else:
            self.lf_dev32.pack(fill=X, expand=True, side=TOP)
            self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM)

    #----------------------------------------------------------------------
    def save_config(self):

        #if self.board_config.radioButton_arch_8.isChecked(): arch = 8
        #else: arch = 32
        self.main.configIDE.set("Board", "arch", self.arch_var.get())

        #if self.board_config.radioButton_mode_bootloader.isChecked(): mode = "bootloader"
        #else: mode = "icsp"
        self.main.configIDE.set("Board", "mode", self.mode_var.get())

        #if self.board_config.radioButton_bootloader_v1_v2.isChecked(): bootloader = "v1_v2"
        #else: bootloader = "v4"
        self.main.configIDE.set("Board", "bootloader", self.boot_var.get())

        name = self.main.configIDE.config("Board",
                                          "board_" + str(self.arch_var.get()),
                                          None)
        self.main.configIDE.set("Board", "board", name)

    #----------------------------------------------------------------------
    def accept_config(self):

        self.save_config()
        self.main.configIDE.save_config()
        self.main.statusbar_ide(self.main.get_status_board())
        self.close_advance()
        self.quit()

    #----------------------------------------------------------------------
    def advance(self):

        root = Toplevel()
        self.frame_advance = BoardConfigAdvance(master=root, main=self.main)
        self.frame_advance.mainloop()

    #----------------------------------------------------------------------
    def close_advance(self):

        try:
            assert self.frame_advance
        except:
            return
        self.frame_advance.quit()
Пример #41
0
	def sdListComplete(self, sdlist):
		top = self.top = Toplevel(self.app) 
		top.title("SD Card Control")
		top.protocol('WM_DELETE_WINDOW', self.delTop)
		f = Frame(top, height=150, width=150)
		f.grid(row=1, column=1);
		self.tree = Treeview(f, height=12, selectmode='browse') 
		self.tree.column("#0", minwidth=100)
		self.tree.bind("<<TreeviewSelect>>", self.treeSelect)
		self.sb = Scrollbar(f)
		self.sb.config(command=self.tree.yview)
		self.tree.config(yscrollcommand=self.sb.set)
			
		self.sb.pack(side=RIGHT, fill=Y)
		self.tree.pack(side=LEFT, fill=BOTH, expand=1)

		SDroot = SDDir('')
		for item in sdlist:
			if item.startswith('/'):
				cd = SDroot
				l = item[1:].split('/')
				for d in l[:-1]:
					ncd = cd.getDir(d)
					if ncd == None:
						ncd = cd.addDir(d)
			
					cd = ncd
				cd.addFile(l[-1], fqn=item)
					
			else:
				SDroot.addFile(item)
				
		SDroot.sortAll()
		
		self.fileMap = {}
		self.startFile = None
		self.loadDir(SDroot, '')
		bf = Frame(top, width=50)
		bf.grid(column=3, row=1)
		
		blf = LabelFrame(bf, text="Print from SD Card", width=48, height=40)
		
		self.bPrint = Button(blf, text='Print', command=self.doPrint, width = 6) 
		self.bPrint.pack()
		blf.pack(fill='x')
		
		blf = LabelFrame(bf, text="Delete from SD Card", width=48, height=40)
		
		self.bDelete = Button(blf, text="Delete", command=self.doDelete, width=6)
		self.bDelete.pack()
		blf.pack(fill='x')
		
		blf = LabelFrame(bf, text="Upload to SD Card", width=48, height=180)

		self.upDir = Label(blf, text="Dir:", justify=LEFT)
		self.upDir.pack()

		ef = Frame(blf)

		l = Label(ef, text="File:", justify=LEFT)
		l.pack(side=LEFT)

		self.entry = Entry(ef, width=12)
		self.entry.pack(side=LEFT)
		fn = 'untitled.g'
		if self.app.GCodeFile:
			fn = os.path.basename(self.app.GCodeFile)
			if len(fn) > 8:
				fn = fn[0:8]
			fn += ".g"
		self.entry.delete(0, END)
		self.entry.insert(0, fn)
		ef.pack()
		
		self.bUpload = Button(blf, text="Upload", command=self.doUpload, width=6)
		self.bUpload.pack()

		blf.pack(fill='x')
		
		if self.app.printing or self.app.sdprinting:
			self.bPrint.config(state=DISABLED)
			self.bUpload.config(state=DISABLED)
			
		if not self.app.GCodeFile:
			self.bUpload.config(state=DISABLED)
			
		blf = Frame(bf)
		self.bExit = Button(blf, text='Exit', command=self.doExit, width=6) 
		self.bExit.pack()
		blf.pack()

		if self.startFile:
			self.tree.selection_set(self.startFile)
			
		self.top.geometry("360x300+100+100")
Пример #42
0
class Screen(Observer):
    def __init__(self, parent, bg="white"):
        self.menu_bar = MenuBar(parent)
        self.canvas = Canvas(parent, bg=bg, name="screen")
        self.frameControl = Frame(parent)
        self.frameLabelSignals = LabelFrame(self.frameControl,
                                            text="Signaux",
                                            padx=20,
                                            pady=20)
        self.frameLabelMode = LabelFrame(self.frameControl,
                                         text="Mode",
                                         padx=20,
                                         pady=20)
        self.panelControl = ttk.Notebook(self.frameLabelSignals)
        self.checkbox_signalX = Checkbutton(self.frameLabelMode,
                                            text="Signal X")
        self.checkbox_signalY = Checkbutton(self.frameLabelMode,
                                            text="Signal Y")
        self.checkbox_XY = Checkbutton(self.frameLabelMode, text="XY")

        self.panel_control_page = []  # contient les références de mes curseurs

        for p in parent.get_models():
            self.addPage(p.get_name())

    def addPage(self, name):
        page = ttk.Frame(self.panelControl)
        self.panelControl.add(page, text='signal ' + name)

        visible_checkbox = Checkbutton(page, text="Afficher")
        magnitude = Scale(page,
                          length=250,
                          orient="horizontal",
                          label="Amplitude",
                          sliderlength=20,
                          showvalue=0,
                          from_=0,
                          to=5,
                          tickinterval=1,
                          name="magnitudeScale")
        frequency = Scale(page,
                          length=250,
                          orient="horizontal",
                          label="Frequency",
                          sliderlength=20,
                          showvalue=0,
                          from_=0,
                          to=25,
                          tickinterval=5,
                          name="frequencyScale")
        phase = Scale(page,
                      length=250,
                      orient="horizontal",
                      label="Phase",
                      sliderlength=20,
                      showvalue=0,
                      from_=0,
                      to=20,
                      tickinterval=5,
                      name="phaseScale")
        visible_checkbox.pack(fill="x", pady=6)
        magnitude.pack(expand=1, fill="both", pady=6)
        frequency.pack(expand=1, fill="both", pady=6)
        phase.pack(expand=1, fill="both", pady=6)
        self.panel_control_page.append({
            'visible': visible_checkbox,
            'magnitude': magnitude,
            'frequency': frequency,
            'phase': phase
        })

    def update(self, model):
        if type(model) == list:
            for i, m in enumerate(model):
                signal = m.get_signal()
                #self.plot_signal(signal, m.get_color())
                self.plot_signal(m)
        else:
            signal = model.get_signal()
            self.plot_signal(model)
        self.grid(6, 8)

    def get_panel_control_index(self):
        return self.panelControl.index('current')

    def get_canvas(self):
        return self.canvas

    def get_panel_control_page(self):
        return self.panel_control_page

    def get_magnitude(self, index):
        return self.panel_control_page[index]['magnitude']

    def get_frequency(self, index):
        return self.panel_control_page[index]['frequency']

    def get_phase(self, index):
        return self.panel_control_page[index]['phase']

    def get_visible(self, index):
        return self.panel_control_page[index]['visible']

    def get_checkbox_signalX(self):
        return self.checkbox_signalX

    def get_checkbox_signalY(self):
        return self.checkbox_signalY

    def get_checkbox_XY(self):
        return self.checkbox_XY

    def plot_signal(self, model):
        w, h = self.canvas.winfo_width(), self.canvas.winfo_height()
        width, height = int(w), int(h)

        signal = model.get_signal()
        name = model.get_name()
        color = model.get_color()

        if self.canvas.find_withtag("signal" + name):
            self.canvas.delete("signal" + name)

        if signal and len(signal) > 1 and model.is_visible():
            plot = [(x * width, height / 2.0 * (y + 1)) for (x, y) in signal]
            self.canvas.create_line(plot,
                                    fill=color,
                                    smooth=1,
                                    width=3,
                                    tags="signal" + name)
            self.canvas.scale("signal" + name, width / 2, height / 2, 1.0,
                              0.25)

    def grid(self, row, col):
        w, h = self.canvas.winfo_width(), self.canvas.winfo_height()
        width, height = int(w), int(h)

        if self.canvas.find_withtag("grid"):
            self.canvas.delete("grid")

        # dessin des axes X et Y
        self.canvas.create_line(5,
                                height / 2,
                                width,
                                height / 2,
                                arrow="last",
                                tags=('grid', 'axe-x'))
        self.canvas.create_line(width / 2,
                                height - 5,
                                width / 2,
                                5,
                                arrow="last",
                                tags=('grid', 'axe-y'))

        # dessin des lignes verticales
        for c in range(1, int(row / 2) + 1):
            stepW = width / row
            xd = width / 2 + c * stepW
            xg = width / 2 - c * stepW
            #Creation des lignes verticales
            self.canvas.create_line(xd,
                                    height - 5,
                                    xd,
                                    5,
                                    dash=1,
                                    tags=('grid', 'vertical-line'),
                                    fill='grey')  #cote droit
            self.canvas.create_line(xg,
                                    height - 5,
                                    xg,
                                    5,
                                    dash=1,
                                    tags=('grid', 'vertical-line'),
                                    fill='grey')  #cote gauche
            #Creation des tirets sur x
            self.canvas.create_line(xd,
                                    height / 2 - 4,
                                    xd,
                                    height / 2 + 4,
                                    tags=('grid', 'horizontal-line'),
                                    fill='grey')
            self.canvas.create_line(xg,
                                    height / 2 - 4,
                                    xg,
                                    height / 2 + 4,
                                    tags=('grid', 'horizontal-line'),
                                    fill='grey')

        # dessin des lignes horizontales
        for r in range(1, int(col / 2) + 1):
            stepH = height / col
            yB = height / 2 + r * stepH
            yH = height / 2 - r * stepH
            #Creation des lignes horizontales
            self.canvas.create_line(5,
                                    yB,
                                    width,
                                    yB,
                                    dash=1,
                                    tags=('grid', 'horizontal-line'),
                                    fill='grey')
            self.canvas.create_line(5,
                                    yH,
                                    width,
                                    yH,
                                    dash=1,
                                    tags=('grid', 'horizontal-line'),
                                    fill='grey')
            #Creation des tirets sur y
            self.canvas.create_line(width / 2 - 4,
                                    yB,
                                    width / 2 + 4,
                                    yB,
                                    tags=('grid', 'vertical-line'),
                                    fill='grey')
            self.canvas.create_line(width / 2 - 4,
                                    yH,
                                    width / 2 + 4,
                                    yH,
                                    tags=('grid', 'vertical-line'),
                                    fill='grey')

    def packing(self):
        self.menu_bar.pack(fill='x')
        self.canvas.pack(side=LEFT, expand=1, fill="both", padx=6, pady=6)
        self.panelControl.pack(side=RIGHT, expand=1, fill="both", pady=6)
        self.frameLabelSignals.pack(expand=1, fill="both")
        self.frameLabelMode.pack(expand=1, fill="both")
        self.checkbox_signalX.pack(side=LEFT)
        self.checkbox_signalY.pack(side=LEFT)
        self.checkbox_XY.pack(side=RIGHT)
        self.frameControl.pack(side=RIGHT, expand=1, fill="both", pady=6)
Пример #43
0
    def __init__(self, statement, entry):
        """
            instantiate a transaction window
        """
        self.rules = statement.rules

        self.root = Tk()
        self.root.title('Manual Annotation')
        t = Frame(self.root, bd=2 * self.BORDER)

        # top stack: input file name
        f = Frame(t)
        caption = "File: " + statement.filename + ", line: " + \
            str(statement.file_line)
        Label(f, text=caption).pack()
        f.pack(pady=self.PADDING)

        # middle stack: entry details
        f = Frame(t)
        f1 = LabelFrame(f, text="Date")
        self.date = Label(f1, text=entry.date)
        self.date.pack(padx=self.PADDING, pady=self.PADDING)
        f1.pack(side=LEFT, padx=self.PADDING)

        f1 = LabelFrame(f, text="Amount")
        self.amount = Label(f1, text=entry.amount)
        self.amount.pack(padx=self.PADDING, pady=self.PADDING)
        f1.pack(side=LEFT, padx=self.PADDING)

        f1 = LabelFrame(f, text="Account")
        self.acct = Text(f1, height=1, width=self.ACCT_WID)
        if entry.account is not None:
            self.acct.insert(END, entry.account)
        self.acct.pack(padx=self.PADDING, pady=self.PADDING)
        f1.pack(side=LEFT, padx=self.PADDING)

        f1 = LabelFrame(f, text="Description")
        self.desc = Text(f1, height=1, width=self.DESC_WID)
        self.desc.insert(END, entry.description)
        self.desc.pack(padx=self.PADDING, pady=self.PADDING)
        f1.pack(side=LEFT, padx=self.PADDING)
        f.pack(pady=self.PADDING)

        # bottom stack: action buttons
        f = Frame(t)
        b = Button(f, text="Accept", command=self.accept)
        b.pack(side=LEFT, padx=self.PADDING)

        # account selection menu
        self.account = StringVar(f)
        self.account.set(entry.account)
        m = OptionMenu(f,
                       self.account,
                       *sorted(statement.acc_list),
                       command=self.chooseAcct)
        m.pack(side=LEFT, padx=self.PADDING)

        # aggregate description selection menu
        self.description = StringVar(f)
        self.menu = OptionMenu(f,
                               self.description,
                               *sorted(statement.agg_list),
                               command=self.chooseDesc)
        self.menu.pack(side=LEFT, padx=self.PADDING)

        b = Button(f, text="Delete", command=self.delete)
        b.pack(side=LEFT, padx=self.PADDING)
        f.pack(padx=self.PADDING, pady=self.PADDING)

        # finalize
        t.pack(side=TOP)
        self.entry = entry  # default: return what we got