示例#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)
示例#2
0
    def launch(self):
        self.grid()
        self.master.title(self.title)
        self.master.geometry("950x950+500+100")

        # Use this list to keep references to the images used in the buttons. Without a reference
        # the garbage collector will remove them!
        self.images = []

        # Create option frame where the buttons are located and the view frame where the images
        # are shown
        self.master.rowconfigure(1, weight=1)
        self.master.columnconfigure(0, weight=1)
        self.master.bind('<Configure>', self.kernel.layout)
        self.master.protocol("WM_DELETE_WINDOW", self.kernel.close_filter)
        self.option_frame = Frame(self.master, bg="white")
        self.option_frame.grid(row=0, column=0, sticky=W + E + N + S)
        self.view_canvas = ttk.Canvas(self.master,
                                      borderwidth=0,
                                      background="white")

        self.view_frame = Frame(self.view_canvas, background="white")
        self.vsb = Scrollbar(self.master,
                             orient="vertical",
                             command=self.view_canvas.yview)
        self.view_canvas.configure(yscrollcommand=self.vsb.set)

        self.vsb.grid(row=1, column=0, sticky=E + N + S)
        self.view_canvas.grid(row=1, column=0, sticky=W + E + N + S)
        self.view_canvas.create_window((4, 4),
                                       window=self.view_frame,
                                       anchor="nw",
                                       tags="self.frame")

        self.view_frame.bind("<Configure>", self.onFrameConfigure)

        # This list is used to keep a reference of the images displayed in the view frame.
        self.photos = []

        # This list is to be able to reference the labels and delete them when the filter
        # is updated.
        self.view_labels = []
        self.view_checks = []
        self.view_ch_val = []

        btn_frame = Frame(self.option_frame, bg="white")
        btn_frame.grid(row=0,
                       column=2,
                       rowspan=1,
                       padx=(30, 30),
                       sticky=W + E + N + S)

        btn = Button(btn_frame, text="Pick", command=self.kernel.send_pick)
        btn.grid(row=0, column=0, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame, text="Point", command=self.kernel.send_point)
        btn.grid(row=1, column=0, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame,
                     text="Show labels",
                     command=self.kernel.send_showLabels)
        btn.grid(row=2, column=0, padx=(5, 5), sticky=N + W + E)
        self.start_btn = Button(btn_frame,
                                text="Start",
                                command=self.kernel.start)
        self.start_btn.grid(row=0, column=1, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame,
                     text="End session",
                     command=self.kernel.close_filter)
        btn.grid(row=1, column=1, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame,
                     text="Unselect all",
                     command=self.kernel.unselect)
        btn.grid(row=2, column=1, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame,
                     text="Remove",
                     command=self.kernel.find_and_remove)
        btn.grid(row=3, column=1, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame,
                     text="Hide labels",
                     command=self.kernel.send_hideLabels)
        btn.grid(row=3, column=0, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame, text="Clear", command=self.kernel.send_clear)
        btn.grid(row=0, column=3, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame,
                     text="Planning failed",
                     command=self.kernel.send_sorryPlanning)
        btn.grid(row=1, column=3, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame,
                     text="Grasping failed",
                     command=self.kernel.send_sorryGrasping)
        btn.grid(row=2, column=3, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame,
                     text="Not understand",
                     command=self.kernel.send_badRequest)
        btn.grid(row=3, column=3, padx=(5, 5), sticky=N + W + E)
        btn = Button(btn_frame,
                     text="New request",
                     command=self.kernel.send_newRequest)
        btn.grid(row=2, column=2, padx=(5, 5), sticky=N + W + E)

        self.send = IntVar()
        self.send.set(1)
        Checkbutton(btn_frame,
                    text="Send data to server",
                    variable=self.send,
                    bg="white").grid(row=3, column=2, sticky=N + W + E)

        img1 = ImageTk.PhotoImage(
            PIL.Image.open(
                resource_filename("Commands.resources.images", "back.png")))
        self.init_lbl = Label(btn_frame, image=img1, bg="white")
        self.init_lbl.grid(row=0, column=2, padx=(5, 5), sticky=N + W + E)
        self.images.append(img1)

        # Set up the option frame. Start with the color radiobuttons
        self.color_frame = Frame(self.option_frame, background="white")
        self.color_frame.grid(row=0,
                              column=0,
                              rowspan=2,
                              padx=(30, 30),
                              sticky=W + E + N + S)
        lbl = Label(self.color_frame, text="Color filter", background="white")
        lbl.grid(row=0, column=0, columnspan=5)

        self.color = StringVar()
        self.color.set("all")
        colors = self.kernel.get_colors()
        image = PIL.Image.open(
            resource_filename("Commands.resources.images",
                              "default_dont_know.png"))
        photo_def = ImageTk.PhotoImage(image)
        image_select = PIL.Image.open(
            resource_filename("Commands.resources.images",
                              "default_dont_know_sel.png"))
        photo_select_def = ImageTk.PhotoImage(image_select)
        rb1 = Radiobutton(self.color_frame,
                          image=photo_def,
                          selectimage=photo_select_def,
                          variable=self.color,
                          value="all",
                          command=lambda: self.kernel.update_filter(self),
                          indicatoron=False)
        rb1.grid(row=1, column=0, rowspan=2, sticky=W + E + N + S)

        self.images.append(photo_select_def)
        self.images.append(photo_def)
        for i, col in enumerate(colors):
            image = PIL.Image.open(
                resource_filename("Commands.resources.images",
                                  "{}.png".format(col)))
            photo = ImageTk.PhotoImage(image)
            image_select = PIL.Image.open(
                resource_filename("Commands.resources.images",
                                  "{}_sel.png".format(col)))
            photo_select = ImageTk.PhotoImage(image_select)
            rb = Radiobutton(self.color_frame,
                             image=photo,
                             selectimage=photo_select,
                             variable=self.color,
                             value=col,
                             command=lambda: self.kernel.update_filter(self),
                             indicatoron=False)
            rb.grid(row=(int((i + 1) / 5) * 2) + 1,
                    column=(i + 1) % 5,
                    rowspan=2,
                    sticky=W + E + N + S)
            rb.deselect()
            self.images.append(photo_select)
            self.images.append(photo)

        self.shape_frame = Frame(self.option_frame, background="white")
        self.shape_frame.grid(row=0,
                              column=1,
                              rowspan=2,
                              padx=(30, 30),
                              sticky=W + E + N + S)
        lbl = Label(self.shape_frame, text="Shape filter", background="white")
        lbl.grid(row=0, column=0, columnspan=5)

        self.shape = StringVar()
        self.shape.set("all")
        shapes = self.kernel.get_shapes()
        rb1 = Radiobutton(self.shape_frame,
                          image=photo_def,
                          selectimage=photo_select_def,
                          variable=self.shape,
                          value="all",
                          command=lambda: self.kernel.update_filter(self),
                          indicatoron=False)
        rb1.grid(row=1, column=0, rowspan=2, sticky=W + E + N + S)

        for i, sha in enumerate(shapes):
            image = PIL.Image.open(
                resource_filename("Commands.resources.images",
                                  "shape_{}.png".format(sha)))
            photo = ImageTk.PhotoImage(image)
            image_select = PIL.Image.open(
                resource_filename("Commands.resources.images",
                                  "shape_{}_sel.png".format(sha)))
            photo_select = ImageTk.PhotoImage(image_select)
            rb = Radiobutton(self.shape_frame,
                             image=photo,
                             selectimage=photo_select,
                             variable=self.shape,
                             value=sha,
                             command=lambda: self.kernel.update_filter(self),
                             indicatoron=False)
            rb.grid(row=(int((i + 1) / 5) * 2) + 1,
                    column=(i + 1) % 5,
                    rowspan=2,
                    sticky=W + E + N + S)
            rb.deselect()
            self.images.append(photo_select)
            self.images.append(photo)

        self.kernel.update_filter(self)