示例#1
0
    def __init__(self, kernel, master=None):
        Frame.__init__(self, master)
        self.kernel = kernel
        
        self.grid()
        self.master.title("YuMi experiment")
        self.client_tuple = None
        self.master.protocol("WM_DELETE_WINDOW", self.kernel.close_setup)
        #self.master.geometry("100x100+500+100")

        config = self.kernel.read_config()
        

        frame_session_type = Frame(self.master, relief=GROOVE, borderwidth=2)
        frame_participant = Frame(self.master, relief=GROOVE, borderwidth=2)
        frame_data_bases = Frame(self.master, relief=GROOVE, borderwidth=2)
        frame_server = Frame(self.master, relief=GROOVE, borderwidth=2)
        
        # Session type
        self.rbType = StringVar(self.master)
        
        lbl1 = Label(frame_session_type, text="Session type")
        rb1 = Radiobutton(frame_session_type, text="Hololens", variable=self.rbType, value="hololens", command=self.type)
        rb2 = Radiobutton(frame_session_type, text="Monitor", variable=self.rbType, value="monitor", command=self.type)
        rb3 = Radiobutton(frame_session_type, text="Dialogue", variable=self.rbType, value="dialogue", command=self.type)
        rb4 = Radiobutton(frame_session_type, text="Projector", variable=self.rbType, value="projector", command=self.type)
        
        self.rbType.set("hololens")
        rb1.select()
        rb2.deselect()
        rb3.deselect()
        rb4.deselect()

        lbl1.grid(row=0, column=0, sticky=W+N)
        rb1.grid(row=1, column=0, sticky=W+N)
        rb2.grid(row=2, column=0, sticky=W+N)
        rb3.grid(row=3, column=0, sticky=W+N)
        rb4.grid(row=4, column=0, sticky=W+N)

        # Data base
        self.data_base_path = config["data_base_path"]
        try:
            listdir(self.data_base_path)
        except FileNotFoundError:
            self.data_base_path = dirname(__file__)
        
        data_files = [f for f in listdir(self.data_base_path) if isfile(join(self.data_base_path, f))]
        data_files = [files for files in data_files if ".csv" in files]
        self.data_file = StringVar(master)
        if len(data_files) == 0:
            data_files.append("No data found")
        self.data_file.set(data_files[0])

        lbl2 = Label(frame_data_bases, text="Data base")
        btn_browse = Button(frame_data_bases, text="Browse", command=self.kernel.browse_db)
        self.db_drop = OptionMenu(frame_data_bases, self.data_file, *data_files, command=self.kernel.set_db)
        
        self.data_base_file = join(self.data_base_path, self.data_file.get())

        lbl_db1 = Label(frame_data_bases, text="Found in:")
        lbl_db2 = Label(frame_data_bases, text="Choose:")

        lbl_text = self.data_base_path
        if len(lbl_text) > 30:
            lbl_text = "..." + lbl_text[-30:]
        self.lbl_db3 = Label(frame_data_bases, text=lbl_text)

        lbl2.grid(row=0, column=0, columnspan=1, sticky=W+N)
        lbl_db2.grid(row=1, column=0, columnspan=1, sticky=W+N)
        self.db_drop.grid(row=1, column=1, columnspan=3, sticky=E+N)
        lbl_db1.grid(row=2, column=0, columnspan=1, sticky=W+N)
        self.lbl_db3.grid(row=2, column=1, columnspan=3, sticky=W+N)
        btn_browse.grid(row=3, column=3, sticky=E+N)

        # Participant
        self.write_to_path = config["write_to_path"]
        try:
            listdir(self.write_to_path)
        except FileNotFoundError:
            self.write_to_path = dirname(__file__)
        part_dirs = [f for f in listdir(self.write_to_path) if isdir(join(self.write_to_path, f))]
        part_dirs = [dirs for dirs in part_dirs if "participant" in dirs]
        parts = [" ".join(part.split("_")[0:2]) for part in part_dirs]
        self.participant = StringVar()
        self.participant.set("New participant") # default value
        parts = [self.participant.get()] + parts



        lbl_part = Label(frame_participant, text="Name:")
        self.part_entry = Entry(frame_participant, textvariable=self.participant)

        lbl3 = Label(frame_participant, text="Participant")
        
        lbl_text = self.write_to_path
        if len(lbl_text) > 10:
            lbl_text = "..." + lbl_text[-10:]
        self.lbl4 = Label(frame_participant, text=lbl_text)
        lbl5 = Label(frame_participant, text="Save to:")
        self.dropdown_participant = OptionMenu(frame_participant, self.participant, *parts)
        btn_browse2 = Button(frame_participant, text="Browse", command=self.kernel.browse_part)

        lbl_part.grid(row=1, column=0, sticky=W+N)
        self.part_entry.grid(row=1, column=1, sticky=W+N)
        lbl3.grid(row=0, column=0, sticky=W+N)
        self.dropdown_participant.grid(row=2, column=1, columnspan=2, sticky=W+N+E)
        
        lbl5.grid(row=3, column=0, columnspan=1, sticky=W+N)
        self.lbl4.grid(row=3, column=1, sticky=W+N)
        btn_browse2.grid(row=4, column=1, sticky=E+N)

        

        # Server
        self.addr = StringVar(master)
        self.addrs = config["server_adrs"].split(";")
        self.addr.set(self.addrs[0])

        self.port = StringVar(master)
        self.ports = config["server_ports"].split(";")
        self.port.set(self.ports[0])

        lbl6 = Label(frame_server, text="Connect to server")
        lbl7 = Label(frame_server, text="Server address:")
        lbl8 = Label(frame_server, text="Server port:")

        self.rbServer1 = StringVar(self.master)
        
        rb4 = Radiobutton(frame_server, text="", variable=self.rbServer1, value="entry", command=self.server1)
        rb5 = Radiobutton(frame_server, text="", variable=self.rbServer1, value="list", command=self.server1)
        self.rbServer1.set("entry")
        rb4.select()
        rb5.deselect()
        self.adr_entry = Entry(frame_server, textvariable=self.addr)
        self.adr_drop = OptionMenu(frame_server, self.addr, *self.addrs)
        self.adr_drop['state'] = 'disabled'

        self.rbServer2 = StringVar(self.master)

        rb6 = Radiobutton(frame_server, text="", variable=self.rbServer2, value="entry", command=self.server2)
        rb7 = Radiobutton(frame_server, text="", variable=self.rbServer2, value="list", command=self.server2)
        rb6.select()
        rb7.deselect()
        self.rbServer2.set("entry")
        self.port_entry = Entry(frame_server, textvariable=self.port)
        self.port_drop = OptionMenu(frame_server, self.port, *self.ports)
        self.port_drop['state'] = 'disabled'

        lbl8 = Label(frame_server, text="Status:")
        lbl_text = "Not connected"
        if self.kernel.client_tuple:
            lbl_text = "Connected to {}".format(self.kernel.client_tuple[0].host)
        self.lbl9 = Label(frame_server, text=lbl_text)
        btn_connect = Button(frame_server, text="Connect", command=self.kernel.connect)

        lbl6.grid(row=0, column=0, sticky=W+E+N+S)
        lbl7.grid(row=1, column=0, rowspan=2, sticky=W)
        rb4.grid(row=1, column=2, columnspan=1, rowspan=1, sticky=W)
        self.adr_entry.grid(row=1, column=3, columnspan=1, rowspan=1, sticky=W+E+N+S)
        rb5.grid(row=2, column=2, columnspan=1, rowspan=1, sticky=W)
        self.adr_drop.grid(row=2, column=3, columnspan=1, rowspan=1, sticky=W+E+N+S)

        lbl8.grid(row=3, column=0, rowspan=2, sticky=W)
        rb6.grid(row=3, column=2, columnspan=1, rowspan=1, sticky=W)
        self.port_entry.grid(row=3, column=3, columnspan=1, rowspan=1, sticky=W+E+N+S)
        rb7.grid(row=4, column=2, columnspan=1, rowspan=1, sticky=W)
        self.port_drop.grid(row=4, column=3, columnspan=1, rowspan=1, sticky=W+E+N+S)

        lbl8.grid(row=5, column=0, columnspan=1, rowspan=1, sticky=W)
        self.lbl9.grid(row=5, column=3, columnspan=1, rowspan=1, sticky=W)
        btn_connect.grid(row=6, column=3, columnspan=1, rowspan=1, sticky=W)


        # Layout
        btn_launch = Button(self.master, text="Launch", command=self.kernel.launch)
        frame_session_type.grid(row=0,column=0, columnspan=1, rowspan=1, sticky=W+E+N+S)
        frame_data_bases.grid(row=1, column=1, columnspan=1, rowspan=1, sticky=W+E+N+S)
        frame_participant.grid(row=1, column=0, columnspan=1, rowspan=1, sticky=W+E+N+S)
        frame_server.grid(row=0, column=1, columnspan=1, rowspan=1, sticky=W+E+N+S)
        btn_launch.grid(row=2, column=1, sticky=E)