def __init__(self, master=None): Frame.__init__(self, master) self.pack() self.model = TableModel() self.table = TableCanvas(self, model=self.model) self.table.createTableFrame() root.bind('<ButtonRelease-1>', self.clicked) #Bind the click release event self.create_widgets()
def initTable(self, ev = None): self.tableFrame = Tkinter.Frame(self.top) self.tableFrame.pack(expand = True, fill = Tkinter.BOTH) # 后期修改 self.top.geometry('920x700+200+100') self.model = TableModel(rows = 0, columns = 0) # like HTML self.bookTable = TableCanvas(self.tableFrame, self.model, cellwidth=120, cellbackgr='#e3f698', thefont=('Arial',12), rowheight=22, rowheaderwidth=30, rowselectedcolor='yellow', editable=False) # like CSS self.bookTable.createTableFrame() self.colnames = ('ISBN', '书名', '作者', '出版社', '出版时间', '价格') for name in self.colnames: self.bookTable.addColumn(name) self.bookTable.addRows(1) self.bookTable.autoResizeColumns()
def __init__(self, parent, db, tableName="Leer"): ttk.Frame.__init__(self, parent) self.model = TableModel() self.table = TableCanvas(self, model=self.model) self.pack(fill=tk.BOTH, expand=1) self.table.createTableFrame() if tableName == "Leer": return conn = sqlite3.connect(db) c = conn.cursor() c.execute("PRAGMA table_info(%s)" % tableName) # now create the model data = {} result = c.fetchall() colnames = [] for r in result: colnames.append(r[1]) c.execute("SELECT * from %s" % tableName) rows = c.fetchall() n = 0 for n in range(len(rows)): data[n] = {} data[n]["label"] = n count = 0 for r in rows[n]: data[n][colnames[count]] = r count += 1 self.model.importDict(data) self.table.redrawTable()
def ratSightings(self): #call API for data r = requests.get( 'http://ec2-54-174-96-216.compute-1.amazonaws.com:9000/showRecords' ) rtext = r.text rawdata = json.loads(rtext) #create table & model self.ratSightingView = Toplevel() self.ratSightingView.title("List of recent rat sightings") self.rattable = Frame(self.ratSightingView) self.rattable.pack() model = TableModel() model.importDict(rawdata) #convert date column to datetime data type for x in range(len(rawdata)): datestr = model.getValueAt(x, 6) try: date = datetime.datetime.strptime(datestr, '%m/%d/%Y %I:%M:%S %p') model.setValueAt(date.strftime('%Y/%m/%d %I:%M:%S %p'), x, 6) except: try: dt = parser.parse(datestr) model.setValueAt(date.strftime('%Y/%m/%d %I:%M:%S %p'), x, 6) except: pass pass #get data into table table = TableCanvas(self.rattable, model=model) table.createTableFrame() #sort by date table.sortTable(columnName='date') '''
def initTable(self): self.tabFm = Tkinter.Frame(self.top) self.tabFm.pack(expand=True, fill=Tkinter.BOTH) # 后期修改 self.top.geometry('920x700+200+100') self.model = TableModel(rows=0, columns=0) # like HTML self.table = TableCanvas(self.tabFm, self.model, cellwidth=120, cellbackgr='#e3f698', thefont=('Arial', 12), rowheight=22, rowheaderwidth=30, rowselectedcolor='yellow', editable=False) # like CSS self.table.createTableFrame() self.colnames = ('ID', '姓名', '年龄', '加入时间') for name in self.colnames: self.table.addColumn(name) self.refresh()
def init_common_stat(self, statistic): self.frame_common_stat = Frame(self) self.frame_common_stat.grid(row=1, column=0, sticky=N + S + E + W) model_common_stat = TableModel(10, False) model_common_stat.add_column(_("clm_name"), typedata='text', align='left') model_common_stat.add_column(_("clm_ru_en_cnt"), typedata='number', align='right', max_val=u"99999") model_common_stat.add_column(_("clm_en_ru_cnt"), typedata='number', align='right', max_val=u"99999") model_common_stat.add_column(_("clm_ru_en_perc"), typedata='percent', align='right', max_val=u"100.0 %") model_common_stat.add_column(_("clm_en_ru_perc"), typedata='percent', align='right', max_val=u"100.0 %") row_name = [[_("row_learned")], [_("row_study")], [_("row_learn")], [_("row_total")]] for row in [ row_name[i] + it for i, it in enumerate(statistic.get_common_stat()) ]: model_common_stat.add_row(row) self.table_common_stat = TableCanvas(self.frame_common_stat, model_common_stat, sort_enable=False) self.table_common_stat.createTableFrame() self.frame_common_stat.grid_forget()
def __table__(self, master): try: if self.rule_win.state() == 'normal': pass except: data = {} colnums = ['Rule', 'Node', 'Question', 'Yes', 'No'] rule_dict = self.df.ix[:, 'Rule':'No'] for r in range(len(rule_dict.index)): plice = {} for c in range(len(rule_dict.columns)): if rule_dict.iloc[r, c] == 'nan': plice[rule_dict.columns[c]] = ' ' else: plice[rule_dict.columns[c]] = rule_dict.iloc[r, c] data[str(r)] = plice self.rule_win = Toplevel(master) frame = Frame(self.rule_win) frame.pack() model = TableModel() for key in colnums: model.addColumn(key) #sort the columns model.importDict(data) table = TableCanvas(frame, model=model, width=800, height=500, rowheight=20, editable=False, cellbackgr='#E3F6CE', reverseorder=1, rowselectedcolor='yellow') table.createTableFrame() table.sortTable(columnName='Rule')
root.geometry('1000x700') f = Figure(figsize=(4, 4), dpi=50) axis = f.add_subplot(111) canvas = FigureCanvasTkAgg(f, master=root) canvas.get_tk_widget().place(x=10, y=30) frame2 = Frame(root) frame2.place(x=20, y=300) X_Axis = pylab.arange(0, 100, 1) plotFigure = Figure(figsize=(4, 4), dpi=50) axis2 = plotFigure.add_subplot(111) axis2.grid(True) axis2.set_title("Mean value per Frame") axis2.axis([0, 100, 0, 255]) Plot = axis2.plot(X_Axis, [0] * 100, 'o-', color='r', markersize=6) model = TableModel() table = TableCanvas(frame2, model, height=100, width=300) model = table.model table.createTableFrame() canvas2 = FigureCanvasTkAgg(plotFigure, master=root) canvas2.get_tk_widget().place(x=500, y=30) b1 = Button(root, text="Start", bg='white', command=video_start).place(x=50, y=600) b2 = Button(root, text="Stop", bg='white', command=video_stop).place(x=400, y=600) root.mainloop() #===========================================================================================
def init_detailed_stat(self, statistic, stat_count_row): self.frame_detailed_stat = Frame(self) self.frame_detailed_stat.grid(row=1, column=0, sticky=N + S + E + W) self.model_ru_en = TableModel(stat_count_row, True) self.model_ru_en.add_column(_("clm_word"), typedata='text', align='left') self.model_ru_en.add_column(_("clm_transcription"), typedata='text', align='left') self.model_ru_en.add_column(_("clm_translate"), typedata='text', align='left') self.model_ru_en.add_column(_("clm_cnt_suc"), typedata='number', align='right', max_val=u"999") self.model_ru_en.add_column(_("clm_cnt_err"), typedata='number', align='right', max_val=u"999") self.model_ru_en.add_column(_("clm_study_perсent"), typedata='percent', align='right', max_val=u"100.0 %") for row, word in statistic.get_ru_en(): self.model_ru_en.add_row(row, word) self.model_ru_en.sort(5, True) self.table_detailed_stat = TableCanvas( self.frame_detailed_stat, self.model_ru_en, sort_enable=True, callback=self.draw_callback, dbl_click_callback=self.rename_dlg) self.table_detailed_stat.createTableFrame() self.model_en_ru = TableModel(stat_count_row, True) self.model_en_ru.add_column(_("clm_word"), typedata='text', align='left') self.model_en_ru.add_column(_("clm_transcription"), typedata='text', align='left') self.model_en_ru.add_column(_("clm_translate"), typedata='text', align='left') self.model_en_ru.add_column(_("clm_cnt_suc"), typedata='number', align='right') self.model_en_ru.add_column(_("clm_cnt_err"), typedata='number', align='right') self.model_en_ru.add_column(_("clm_study_perсent"), typedata='percent', align='right') for row, word in statistic.get_en_ru(): self.model_en_ru.add_row(row, word) self.model_en_ru.sort(5, True) for col in range(0, self.model_en_ru.get_column_count()): self.model_en_ru.get_column( col).width = self.model_ru_en.get_column(col).width
def __init__(self, parent): self.listEnfermedad = ['a', "d", "c"] self.listMedicamentos = ['a', "d", "c"] self.listObserver = [] self.actualizarListas() self.actualrow = 0 self.rowEvent = 99 #Ventana de tablas y entradas self.r1 = parent self.r = Frame(self.r1) self.r1.wm_title("Ventana de busqueda") self.group = LabelFrame(self.r, bd=0) # self.group.grid(row=0,column=0,sticky=NW, padx=5, pady=5) self.group.pack(side=LEFT) self.r.pack(expand=True, fill='x', side=LEFT) # Ventana que muestra antecedesntes y informacion especifica de radiografia self.a = Frame(self.r1, padx=20, pady=20) self.b = VentanaDetalles(self.a) self.b.setWindow(self) self.a.pack(side=RIGHT) #Filtrar por id self.putInPlace(IdSearch) #Filtrar por nombre self.putInPlace(NameSearch) #Filtrar por apellido self.putInPlace(LastNameSearch) #Filtrar por Rut self.putInPlace(RutSearch) #Filtrar por sexo self.putInPlace(SexoSearch) #Filtrar por Enfermedad y confirmado comboBox self.listObserver.append(self.putInPlace(Enfermedadearch)) #Filtro confirmado self.putInPlace(ConfirmadoSearch) #Tipo de radiografia self.putInPlace(TipoRadioSearch) #Fecha inicio fecha final self.putInPlace(FechaSearch) #Fuma self.putInPlace(FumaSearch) #Medicamento self.listObserver.append(self.putInPlace(MedicamentoSearch)) #Mostrar resultados marco11 = Frame(self.r) bSearch = Button(marco11, text="Busqueda", command=self.doQuery) bSearch.pack(padx=5, pady=5) lResultados = Label(marco11, text="Resultados de query: ") lResultados.pack(padx=5, pady=5) # marco11.grid(row=self.actualrow, column=0,sticky=W, padx=5, pady=5) marco11.pack() self.actualrow += 1 marco12 = Frame(self.r) self.model = TableModel() self.table = TableCanvas(marco12, self.model, cellwidth=120, cellbackgr='#e3f698', thefont=('Arial', 9), rowheight=18, rowheaderwidth=30, rowselectedcolor='yellow', editable=False) self.table.createTableFrame() # marco12.grid(row=self.actualrow,column=0,sticky=W, padx=5, pady=5) marco12.pack(expand=False, fill='x') self.actualrow += 1 self.actualizarListas() self.r1.bind("<Button-1>", self.changeCurrentId)
def findTermFrequencies(self): """ Method for calculating the frequencies of each term in the tweets. """ if not os.path.isfile(self.TwitterKeysFile): tkMessageBox.showerror( "ERROR", "Twitter API credentials not filled. Use the Set/Update Twitter Credentials button to do so.", parent=self.parent) return self.count += 1 if self.termFrequenciesOpenedFlag == False: # set window opened self.termFrequenciesOpenedFlag = True # initialize window global TermFrequenciesWindow def toggleFlag(): self.termFrequenciesOpenedFlag = False TermFrequenciesWindow.destroy() TermFrequenciesWindow = tk.Toplevel(self) TermFrequenciesWindow.minsize(500, 500) #TwitterKeysWindow.overrideredirect(True) TermFrequenciesWindow.geometry("500x500+100+100") TermFrequenciesWindow.title("Term Frequencies (only > 0.5%)") TermFrequenciesWindow.config(bd=5) TermFrequenciesWindow.protocol("WM_DELETE_WINDOW", toggleFlag) # create a new TableModel for table data model = TableModel() # create a new TableCanvas for showing the table table = TableCanvas(TermFrequenciesWindow, model=model, editable=False) table.createTableFrame() # dictionary for storing table data tableData = {} # calculate frequencies freqs = {} total = 0 outfile = open(self.TwitterStreamFile) for line in outfile: json_obj = json.loads(line) try: text = json_obj['text'].decode('utf-8') # clean the text text = ' '.join( re.sub( "(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)", "", text).split()) text = re.sub(r'^https?:\/\/.*[\r\n]*', '', text, flags=re.MULTILINE) text = re.sub(r'RT', '', text, flags=re.MULTILINE) #print text text_list = text.split(' ') for char in text_list: if char.isalnum(): if char not in freqs: freqs[char] = 1 else: freqs[char] += 1 total += 1 except: #print "passed" pass for key in freqs.keys(): if freqs[key] / float(total) > 0.005: # insert frequencies into the table dictionary tableData[uuid.uuid4()] = { 'Term': key, 'Frequency (%)': str(round((freqs[key] / float(total)) * 100, 2)) } #print key + " " + str(freqs[key]/float(total)) # insert and sort data in the table model.importDict(tableData) #sort in descending order model.setSortOrder(columnIndex=1, reverse=1) table.adjustColumnWidths() table.resizeColumn(0, 200) table.resizeColumn(1, 200) table.redrawTable()
def findTweetSentiment(self): """ Method for calculating the sentiment of each tweet. """ if not os.path.isfile(self.TwitterKeysFile): tkMessageBox.showerror( "ERROR", "Twitter API credentials not filled. Use the Set/Update Twitter Credentials button to do so.", parent=self.parent) return self.count += 1 if self.tweetSentimentOpenedFlag == False: # set window opened self.tweetSentimentOpenedFlag = True # initialize window global TweetSentimentWindow def toggleFlag(): self.tweetSentimentOpenedFlag = False TweetSentimentWindow.destroy() TweetSentimentWindow = tk.Toplevel(self) TweetSentimentWindow.minsize(600, 500) #TwitterKeysWindow.overrideredirect(True) TweetSentimentWindow.geometry("1000x500+100+100") TweetSentimentWindow.title( "Tweet Sentiments (Zero values omitted)") TweetSentimentWindow.config(bd=5) TweetSentimentWindow.protocol("WM_DELETE_WINDOW", toggleFlag) # create a new TableModel for table data model = TableModel() # create a new TableCanvas for showing the table table = TableCanvas(TweetSentimentWindow, model=model, editable=False) table.createTableFrame() # dictionary for storing table data tableData = {} # calculate sentiments afinnfile = open(self.AFINNFile) scores = {} for line in afinnfile: term, score = line.split("\t") scores[term] = int(score) #print scores.items() positive = 0.0 negative = 0.0 outfile = open(self.TwitterStreamFile) for line in outfile: json_obj = json.loads(line) sentiment = 0 try: text = json_obj['text'].decode('utf-8') # clean the text text = ' '.join( re.sub( "(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)", "", text).split()) text = re.sub(r'^https?:\/\/.*[\r\n]*', '', text, flags=re.MULTILINE) text = re.sub(r'RT', '', text, flags=re.MULTILINE) #print text text_list = text.split(' ') for char in text_list: if char in scores: sentiment += scores[char] if sentiment != 0: # add items to table data dictionary tableData[uuid.uuid4()] = { 'Tweet': text, 'Score': str(sentiment) } if sentiment > 0: positive += 1 elif sentiment < 0: negative += 1 #print text + " " + str(sentiment) + "\n\n" except: #print "passed" pass # calculate ratio if positive > 0 and negative > 0: ratio = round(float(positive) / float(negative), 2) # insert and sort data in the table model.importDict(tableData) table.resizeColumn(0, 850) table.resizeColumn(1, 50) table.sortTable(columnName='Score') table.redrawTable() if positive > negative: extra = "The overall sentiment is POSITIVE." else: extra = "The overall sentiment is NEGATIVE." # show info box about the overall result tkMessageBox.showinfo( "Score Ratio", "The ratio of positive vs. negative tweets is " + str(ratio) + ". " + extra, parent=TweetSentimentWindow)
def __init__(self, tableName, database, themeWindow, returnEvent): self.tableName = tableName self.database = database self.themeWindow = themeWindow # Start logger self.logger = Logger(__name__, loggingLevel="debug") self.logger.debug("TableController logger has started.") self.addWindow = None self.modifyWindow = None self.columnNames = self.database.getColumns(tableName) self.tableData = self.database.getRawData(tableName) self.data = self.database.getData(tableName) self.model = TableModel() if len(self.data) == 0: messagebox.showwarning("Empty table", "This table has no records!") self.data["_"] = dict() self.data["_"]["_"] = "Empty table" else: for key, records in self.data.items(): for col, value in records.items(): if isinstance(value, datetime.date): self.data[key][col] = str(value) self.model.importDict(self.data) # Widgets self.content = Frame(self.themeWindow, bg="#B7B9B8", bd=4, relief=RAISED, width=self.themeWindow.winfo_width() - 80, height=self.themeWindow.winfo_height() - 80) self.content.place(x=40, y=40) self.content.grid(row=0, column=0) self.content.bind("<<goback>>", lambda _: returnEvent(None)) self.content.update() # Canvas with options menu self.topCanvas = Canvas(self.content, bg="white", bd=1, relief=RAISED, width=int(self.content.winfo_width()), height=int(self.content.winfo_height() / 12)) self.topCanvas.pack(fill='both', side=TOP) self.backButton = Button(self.topCanvas, text=" < ", command=self.back, width=9) self.backButton.pack(fill='both', side=LEFT) self.showButton = Button(self.topCanvas, text="Refresh table", command=self.refreshTable, width=22) self.showButton.pack(fill='both', side=LEFT) # Canvas with data self.middleFrame = Frame(self.content) self.middleFrame.pack(fill='both', side=TOP) self.table = CustomTable(self.middleFrame, model=self.model) self.table.show() # Canvas with DML buttons self.bottomCanvas = Canvas(self.content, bg="white", bd=1, relief=FLAT, width=int(self.content.winfo_width()), height=int(self.content.winfo_height() / 5)) self.bottomCanvas.pack(fill='both', side=TOP) self.buttonAdd = Button(self.bottomCanvas, text=" ADD ", command=self.add, width=24, height=3, bd=5) self.buttonAdd.pack(side=LEFT) self.buttonModify = Button(self.bottomCanvas, text=" MODIFY ", command=self.modify, width=25, height=3, bd=5) self.buttonModify.pack(side=LEFT) self.buttonDelete = Button(self.bottomCanvas, text=" DELETE ", command=lambda: self.delete(self.tableName), width=25, height=3, bd=5) self.buttonDelete.pack(side=LEFT)
def __init__(self, parent, top, opt): ''' Constructor ''' self.__parent = parent self.__top = top self.__opt = opt config = ConfigManager.ConfigManager.getInstance() # Period to delay between table refreshes self.__update_period = config.get('performance', 'telem_table_update_period') # # Status updater singleton # self.__status_update = status_updater.StatusUpdater.getInstance() # # Instance the channel loader here and get all channel names # self.__channel_loader = channel_loader.ChannelLoader.getInstance() self.__channel_names_list = self.__channel_loader.getNameDict().values( ) self.__channel_names_dict = self.__channel_loader.getNameDict() num_channels = len(self.__channel_loader.getNameDict()) # # Container Frame f = Tkinter.Frame(parent) f.pack(side=Tkinter.TOP, anchor=Tkinter.N, fill=Tkinter.BOTH, expand=1) # # Create a model and connect it to a table on a canvas # self.__model = TableModel() self.__table = TableCanvas(f, model=self.__model, width=1200, height=800) # Set font font = config.get('tables', 'font') font_size = config.get('tables', 'font_size') self.__table.thefont = (font, font_size) self.__table.rowheight = int(font_size) + 5 self.__table.createTableFrame() self.__table.redrawTable() # Mouse movement causes flyover text. This is not needed. # Unbind the appropriate event handler self.__table.unbind('<Motion>') # # Init. the table with a standard set of column headers # data = {'1': {'Channel': None}} self.__model.importDict( data) # can import from a dictionary to populate model self.__table.addColumn('Id') self.__table.addColumn('Time') self.__table.addColumn('Value') for i in range(2, num_channels + 1): self.__table.addRow("%s" % i) self.__table.align = 'w' self.__table.redrawTable() self.__table.maxcellwidth = 500 # Remove Row and cell highlight color self.__table.rowselectedcolor = None self.__table.selectedcolor = None # Rebind <B1-Motion> event to catch exception from column resize error self.__table.tablecolheader.unbind('<B1-Motion') self.__table.tablecolheader.bind('<B1-Motion>', self.__handle_column_motion) self.__table.tablecolheader.unbind('<ButtonRelease-1>') self.__table.tablecolheader.bind('<ButtonRelease-1>', self.__handle_column_release) # Make table read only self.__table.editable = False # # Pop-up Channel Telemetry Filter Selection and Active Filter Status. # f2 = Tkinter.LabelFrame(f, text="Channel Telemetry Filtering:", padx=5, pady=5) f2.grid(row=2, column=0, columnspan=4, sticky=Tkinter.W + Tkinter.E) # b1 = Tkinter.Button(f2, text="Select Channels", command=self.__select) b1.pack(side=Tkinter.LEFT) # Hex value toggle self.__print_hex = Tkinter.IntVar() self.__print_hex.set(0) self.__hex_cb = Tkinter.Checkbutton(f2, text="Show Hex", variable=self.__print_hex, pady=5) self.__hex_cb.pack(side=Tkinter.RIGHT) # self.__e1 = Pmw.ScrolledField(f2, labelpos=Tkinter.W, labelmargin=0, text="None") self.__e1.pack(side=Tkinter.LEFT, expand=1, fill=Tkinter.X) self.__e1.component('entry').config(width=60) self.__e1.component('label').config(text='Active Filter Selected:') # # This is a channel id key to row value dictionary # built up over runtime to update table. # self.__row_dict = dict() self.__row_max = 1 # # List of active channels to display self.__channel_names_list.sort() self.__channels_active_list = self.__channel_names_list self.__inactive_channels = []
def __init__(self, frame, usable_width, direction): self.deleted = False self.directed = direction self.ftable = Frame(frame.ftables) self.ft = Frame(self.ftable) self.fnp = Frame(self.ftable) #frame network properties if(usable_width > 1500) : button_width=17 button_width_plot=7 font=('Verdana',9) image_button = 23 list_fonts = list( tkFont.families() ) elif(usable_width > 1200): button_width=15 button_width_plot=6 image_button = 28 font=('Verdana',10) else: button_width=14 button_width_plot=5 image_button = 28 font=('Verdana',8) if(usable_width > 1500): self.save_img = PhotoImage(file="save.gif") self.load_img = PhotoImage(file="load.gif") self.delete_img = PhotoImage(file="delete.gif") elif(usable_width > 1200): self.save_img = PhotoImage(file="save22.gif") self.load_img = PhotoImage(file="load22.gif") self.delete_img = PhotoImage(file="delete.gif") else: self.save_img = PhotoImage(file="save20.gif") self.load_img = PhotoImage(file="load20.gif") self.delete_img = PhotoImage(file="delete.gif") labelfnp_width = 10 pos = 0 # buttons area for the right panel of each graph self.buttonSave = Button(master=self.fnp, image=self.save_img, command=lambda num=frame.number_table: save_network(frame, num), relief=FLAT, width=image_button) self.buttonSave.image = self.save_img self.buttonSave.grid(row=0, column=0, pady=1, padx=1) self.buttonDelete = Button(master=self.fnp, image=self.delete_img, command=lambda num=frame.number_table: delete_network(frame, num), relief=FLAT, width=image_button) self.buttonDelete.image = self.delete_img self.buttonDelete.grid(row=pos, column=1, pady=1, padx=1) pos += 1 self.plot_button = Button(master=self.fnp, text='Plot', command=lambda num=frame.number_table: plot_graph(frame, num), width=button_width) self.plot_button.grid(row=pos, column=0, columnspan=2, pady=2, padx=5) pos += 1 self.netPro_label = Label(self.fnp, text="Network properties:", width=3*labelfnp_width, anchor=CENTER) self.netPro_label.grid(row=pos, column=0, columnspan=2, pady=2, padx=5) pos += 1 self.number_nodesLabel = Label(self.fnp, text="Nodes: ", width=labelfnp_width, anchor=W) self.number_nodesLabel.grid(row=pos, column=0, pady=2, padx=5) self.number_nodes_str = StringVar() self.number_nodes_l = Label(self.fnp, textvariable=self.number_nodes_str, width=labelfnp_width, anchor=W) self.number_nodes_l.grid(row=pos, column=1, pady=2, padx=5) pos += 1 self.number_arcsLabel = Label(self.fnp, text="Arcs: ", width=labelfnp_width, anchor=W) self.number_arcsLabel.grid(row=pos, column=0, pady=2, padx=5) self.number_arcs_str = StringVar() self.number_arcs_l = Label(self.fnp, textvariable=self.number_arcs_str, width=labelfnp_width, anchor=W) self.number_arcs_l.grid(row=pos, column=1, pady=2, padx=5) pos += 1 self.number_diameterLabel = Label(self.fnp, text="Diameter: ", width=labelfnp_width, anchor=W) self.number_diameterLabel.grid(row=pos, column=0, pady=2, padx=5) self.diameter_str = StringVar() self.diameter_l = Label(self.fnp, textvariable=self.diameter_str, width=labelfnp_width, anchor=W) self.diameter_l.grid(row=pos, column=1, pady=2, padx=5) pos += 1 self.assortativityLabel = Label(self.fnp, text="Assortativity: ", width=labelfnp_width, anchor=W) self.assortativityLabel.grid(row=pos, column=0, pady=2, padx=5) self.assortativity_str = StringVar() self.assortativity_l = Label(self.fnp, textvariable=self.assortativity_str, width=labelfnp_width, anchor=W) self.assortativity_l.grid(row=pos, column=1, pady=2, padx=5) pos += 1 self.entropyLabel = Label(self.fnp, text="Entropy: ", width=labelfnp_width, anchor=W) self.entropyLabel.grid(row=pos, column=0, pady=2, padx=5) self.entropy_str = StringVar() self.entropy_l = Label(self.fnp, textvariable=self.entropy_str, width=labelfnp_width, anchor=W) self.entropy_l.grid(row=pos, column=1, pady=2, padx=5) pos += 1 self.subgraph_ind_sub = Button(master=self.fnp, text='Induced subgraph', font=font, command=lambda num=frame.number_table: induced_subgraph(frame, num, usable_width), width=button_width) self.subgraph_ind_sub.grid(row=pos, column=0, pady=2, padx=5) pos+=1 self.subgraph_ind_sub_lev = Button(master=self.fnp, text='Subgraph level', font=font, command=lambda num=frame.number_table: subgraph_levels(frame, num, usable_width), width=button_width) self.subgraph_ind_sub_lev.grid(row=pos, column=0, pady=2, padx=5) self.frame_but = Frame(self.fnp) #table part, create and fill columns self.columnNames = columnNames self.model = TableModel() self.model.data = {} for i in xrange(len(self.columnNames)): if(direction): if(columnNames[i] != "Information centrality"): self.model.addColumn(self.columnNames[i]) else: if(columnNames[i] != 'Eccentricity in'): if(columnNames[i] != 'Vibrational centrality in'): if(columnNames[i] != 'In degree'): if(columnNames[i] != 'Total degree'): self.model.addColumn(self.columnNames[i].replace(" out", "").replace("Out degree", "Degree")) if(usable_width > 1500): thefont=30 rowheight=22 else: thefont=5 rowheight=20 self.table = TableCanvas(self.ft, model=self.model, rows=0, cols=0, rowheaderwidth=0, rowheight=rowheight, cellbackgr='#ffffff', thefont=thefont, editable=False, showkeynamesinheader=True, autoresizecols=True, fill=X) self.model.addRow() self.table.createTableFrame() self.file_name = StringVar() self.file_name_label = Label(self.ftable, textvariable=self.file_name) self.file_name_label.pack(side=TOP) self.ft.pack(side=LEFT, expand=True, fill=X) self.fnp.pack(side=RIGHT) self.ftable.pack(expand=True, fill=X) #create the centrality list self.centrality = [[] for x in xrange(len(self.columnNames))] self.table.fontsize=thefont self.table.setFontSize() self.adj_matrix = None self.laplacian_psinv = None frame.canvas.config(scrollregion=frame.canvas.bbox("all"))