def file_selected(self): file = self.file_listbox.curselection() if len(file) != 1: sys.stderr.write("No file selected.\n") else: file = map(int, file) fname = self.file_listbox.get(file[0]) file_path = os.path.join(self.dir, fname) if self.GenePair_instance: # clean it up self.GenePair_instance = None else: self.GenePair_instance = GenePair(file_path) gene_ids = self.GenePair_instance.gene_id2expr_array.keys() gene_ids.sort() for gene_id in gene_ids: self.gene_pair_listbox.insert(END, gene_id)
def liststore_gene_fill(self, filename): self.GenePair_instance = GenePair(filename) gene_ids = self.GenePair_instance.gene_id2expr_array.keys() gene_ids.sort() self.liststore = gtk.ListStore(str) # we'll add some data now - for gene_id in gene_ids: self.liststore.append([gene_id]) # set the TreeView mode to be liststore self.treeview1.set_model(self.liststore) # make it searchable self.treeview1.set_search_column(0) # Allow sorting on the column self.tvcolumn.set_sort_column_id(0) # Allow drag and drop reordering of rows self.treeview1.set_reorderable(True) self.treeselection.set_mode(gtk.SELECTION_MULTIPLE)
class GenePairGui: def __init__(self): xml = gtk.glade.XML('genepairgui.glade') xml.signal_autoconnect(self) self.window1 = xml.get_widget("window1") self.window1.connect("destroy", self.destroy) #to get gene_ids input by user self.textview1 = xml.get_widget("textview1") #to draw the plot self.textview2 = xml.get_widget("textview2") #to get gene_ids input by user self.treeview1 = xml.get_widget("treeview1") # create the TreeViewColumn to display the data self.tvcolumn = gtk.TreeViewColumn('Gene Id') # add tvcolumn to treeview self.treeview1.append_column(self.tvcolumn) # create a CellRendererText to render the data self.cell = gtk.CellRendererText() # add the cell to the tvcolumn and allow it to expand self.tvcolumn.pack_start(self.cell, True) # set the cell "text" attribute to column 0 - retrieve text # from that column in liststore self.tvcolumn.add_attribute(self.cell, 'text', 0) #setting the selection mode self.treeselection = self.treeview1.get_selection() #the backend module, non-initilized self.GenePair_instance = None def file_ok_sel(self, w): filename = self.filew.get_filename() self.filew.destroy() self.window1.set_title(filename) self.liststore_gene_fill(filename) def liststore_gene_fill(self, filename): self.GenePair_instance = GenePair(filename) gene_ids = self.GenePair_instance.gene_id2expr_array.keys() gene_ids.sort() self.liststore = gtk.ListStore(str) # we'll add some data now - for gene_id in gene_ids: self.liststore.append([gene_id]) # set the TreeView mode to be liststore self.treeview1.set_model(self.liststore) # make it searchable self.treeview1.set_search_column(0) # Allow sorting on the column self.tvcolumn.set_sort_column_id(0) # Allow drag and drop reordering of rows self.treeview1.set_reorderable(True) self.treeselection.set_mode(gtk.SELECTION_MULTIPLE) def on_button1_clicked(self, button): self.filew = gtk.FileSelection("File selection") #self.filew.connect("destroy", self.destroy) # Connect the ok_button to file_ok_sel method self.filew.ok_button.connect("clicked", self.file_ok_sel) # Connect the cancel_button to destroy the widget self.filew.cancel_button.connect("clicked", lambda w: self.filew.destroy()) # Lets set the filename, as if this were a save dialog, # and we are giving a default filename #self.filew.set_filename("penguin.png") self.filew.show() def on_button2_clicked(self, button): ''' gene selected 02-15-06 use --process_gene_id_list() ''' pathlist = [] gene_id_list = [] self.treeselection.selected_foreach(foreach_cb, pathlist) if len(pathlist) >0: for i in range(len(pathlist)): gene_id_list.append(self.liststore[pathlist[i][0]][0]) self.process_gene_id_list(gene_id_list) def on_button3_clicked(self, button): gtk.main_quit() def on_button4_clicked(self, button): ''' input gene_ids done 02-15-06 use --process_gene_id_list() ''' textbuffer = self.textview1.get_buffer() startiter, enditer = textbuffer.get_bounds() text = textbuffer.get_text(startiter, enditer) gene_id_list = text.split("\n") self.process_gene_id_list(gene_id_list) def process_gene_id_list(self, gene_id_list): """ 02-15-06 split from on_button2_clicked() and on_button4_clicked() """ if len(gene_id_list) >0: filename = self.GenePair_instance.gene_pair_analyze(gene_id_list) scatter_plot_fname = self.GenePair_instance.scatter_plot(gene_id_list) #02-15-06 if filename: self.show_plot(filename) if scatter_plot_fname: self.show_plot(scatter_plot_fname) else: sys.stderr.write("Have you selected a dataset?\n") def show_plot(self, filename): textbuffer = self.textview2.get_buffer() im = Image.open(filename) #r.postscript() gives an image with a strange direction, rotate it back im = im.rotate(-90) ar = fromimage(im) pixbuf = gtk.gdk.pixbuf_new_from_array(ar, gtk.gdk.COLORSPACE_RGB, 8) startiter = textbuffer.get_start_iter() textbuffer.insert_pixbuf(startiter, pixbuf) #cleanup the temporary files and others del im del ar os.remove(filename) def destroy(self, widget): gtk.main_quit()
class GenePairGui: def __init__(self, master, dir): self.dir = dir frame = Frame(master) frame.pack() self.scrollbar_file = Scrollbar(frame, orient=VERTICAL) self.scrollbar_gene_pair = Scrollbar(frame, orient=VERTICAL) self.file_listbox = Listbox(frame, yscrollcommand=self.scrollbar_file.set) self.gene_pair_listbox = Listbox(frame, selectmode=EXTENDED, yscrollcommand=self.scrollbar_gene_pair.set) self.button_file = Button(frame, text="select file", command=self.file_selected) self.button_gene_pair = Button(frame, text="select gene pair", command=self.gene_pair_selected) self.button_quit = Button(frame, text="QUIT", fg="red", command=frame.quit) # geometry arrangement self.scrollbar_file.config(command=self.file_listbox.yview) self.scrollbar_gene_pair.config(command=self.gene_pair_listbox.yview) self.scrollbar_file.pack(fill=Y, expand=1) self.scrollbar_gene_pair.pack(fill=Y, expand=1) self.file_listbox.grid(row=0, column=0) self.scrollbar_file.grid(row=0, column=1) self.gene_pair_listbox.grid(row=0, column=2) self.scrollbar_gene_pair.grid(row=0, column=3) self.button_file.grid(row=1, column=0, columnspan=2) self.button_gene_pair.grid(row=1, column=2, columnspan=2) self.button_quit.grid(row=2, column=1, columnspan=2) # fill the list box self.file_listbox_fill() # GenePair handler self.GenePair_instance = None def file_listbox_fill(self): files = os.listdir(self.dir) for item in files: self.file_listbox.insert(END, item) def file_selected(self): file = self.file_listbox.curselection() if len(file) != 1: sys.stderr.write("No file selected.\n") else: file = map(int, file) fname = self.file_listbox.get(file[0]) file_path = os.path.join(self.dir, fname) if self.GenePair_instance: # clean it up self.GenePair_instance = None else: self.GenePair_instance = GenePair(file_path) gene_ids = self.GenePair_instance.gene_id2expr_array.keys() gene_ids.sort() for gene_id in gene_ids: self.gene_pair_listbox.insert(END, gene_id) def gene_pair_selected(self): gene_pair = self.gene_pair_listbox.curselection() if len(gene_pair) != 2: sys.stderr.write("Did you select two genes?\n") else: gene_pair = map(int, gene_pair) gene_id1 = self.gene_pair_listbox.get(gene_pair[0]) gene_id2 = self.gene_pair_listbox.get(gene_pair[1]) print gene_id1 print gene_id2 self.GenePair_instance.gene_pair_analyze(gene_id1, gene_id2)