Ignore:
Timestamp:
04/03/12 15:53:22 (2 years ago)
Author:
mstajdohar
Branch:
default
rebase_source:
0523fd6857017a4703b32b1631058cfa8d59147b
Message:

Fixed some bugs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Unsupervised/OWNxFile.py

    r10580 r10719  
    1818 
    1919class OWNxFile(OWWidget): 
    20      
    21     settingsList=["recentFiles", "recentDataFiles", "recentEdgesFiles", "auto_table"] 
    22      
    23     def __init__(self,parent=None, signalManager = None): 
     20 
     21    settingsList = ["recentFiles", "recentDataFiles", "recentEdgesFiles", "auto_table"] 
     22 
     23    def __init__(self, parent=None, signalManager=None): 
    2424        OWWidget.__init__(self, parent, signalManager, "Nx File", wantMainArea=False) 
    2525 
    2626        self.inputs = [] 
    2727        self.outputs = [("Network", Orange.network.Graph), ("Items", Orange.data.Table)] 
    28      
     28 
    2929        #set default settings 
    3030        self.recentFiles = ["(none)"] 
    3131        self.recentDataFiles = ["(none)"] 
    3232        self.recentEdgesFiles = ["(none)"] 
    33         self.auto_table = False 
    34          
     33        self.auto_table = True 
     34 
    3535        self.domain = None 
    3636        self.graph = None 
    3737        self.auto_items = None 
    38          
     38 
    3939        #get settings from the ini file, if they exist 
    4040        self.loadSettings() 
     
    4242        #GUI 
    4343        self.controlArea.layout().setMargin(4) 
    44         self.box = OWGUI.widgetBox(self.controlArea, box = "Graph File", orientation = "vertical") 
    45         hb = OWGUI.widgetBox(self.box, orientation = "horizontal")         
     44        self.box = OWGUI.widgetBox(self.controlArea, box="Graph File", orientation="vertical") 
     45        hb = OWGUI.widgetBox(self.box, orientation="horizontal") 
    4646        self.filecombo = OWGUI.comboBox(hb, self, "filename") 
    4747        self.filecombo.setMinimumWidth(250) 
    48         button = OWGUI.button(hb, self, '...', callback = self.browseNetFile, disabled=0) 
     48        button = OWGUI.button(hb, self, '...', callback=self.browseNetFile, disabled=0) 
    4949        button.setIcon(self.style().standardIcon(QStyle.SP_DirOpenIcon)) 
    5050        button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed) 
    5151        OWGUI.checkBox(self.box, self, "auto_table", "Build graph data table automatically", callback=lambda: self.selectNetFile(self.filecombo.currentIndex())) 
    52          
    53         self.databox = OWGUI.widgetBox(self.controlArea, box = "Vertices Data File", orientation = "horizontal") 
     52 
     53        self.databox = OWGUI.widgetBox(self.controlArea, box="Vertices Data File", orientation="horizontal") 
    5454        self.datacombo = OWGUI.comboBox(self.databox, self, "dataname") 
    5555        self.datacombo.setMinimumWidth(250) 
    56         button = OWGUI.button(self.databox, self, '...', callback = self.browseDataFile, disabled=0) 
     56        button = OWGUI.button(self.databox, self, '...', callback=self.browseDataFile, disabled=0) 
    5757        button.setIcon(self.style().standardIcon(QStyle.SP_DirOpenIcon)) 
    5858        button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed) 
    59          
    60         self.edgesbox = OWGUI.widgetBox(self.controlArea, box = "Edges Data File", orientation = "horizontal") 
     59 
     60        self.edgesbox = OWGUI.widgetBox(self.controlArea, box="Edges Data File", orientation="horizontal") 
    6161        self.edgescombo = OWGUI.comboBox(self.edgesbox, self, "edgesname") 
    6262        self.edgescombo.setMinimumWidth(250) 
    63         button = OWGUI.button(self.edgesbox, self, '...', callback = self.browseEdgesFile, disabled=0) 
     63        button = OWGUI.button(self.edgesbox, self, '...', callback=self.browseEdgesFile, disabled=0) 
    6464        button.setIcon(self.style().standardIcon(QStyle.SP_DirOpenIcon)) 
    6565        button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed) 
    66          
     66 
    6767        # info 
    6868        box = OWGUI.widgetBox(self.controlArea, "Info") 
     
    7373 
    7474        OWGUI.rubber(self.controlArea) 
    75         self.resize(150,100) 
     75        self.resize(150, 100) 
    7676        self.activateLoadedSettings() 
    7777 
     
    8080        self.connect(self.datacombo, SIGNAL('activated(int)'), self.selectDataFile) 
    8181        self.connect(self.edgescombo, SIGNAL('activated(int)'), self.selectEdgesFile) 
    82          
     82 
    8383    # set the comboboxes 
    8484    def setFileLists(self): 
     
    9292                self.filecombo.addItem(os.path.split(file)[1]) 
    9393        self.filecombo.addItem("Browse documentation networks...") 
    94          
     94 
    9595        self.datacombo.clear() 
    9696        if not self.recentDataFiles: 
     
    101101            else: 
    102102                self.datacombo.addItem(os.path.split(file)[1]) 
    103                  
     103 
    104104        self.edgescombo.clear() 
    105105        if not self.recentEdgesFiles: 
     
    110110            else: 
    111111                self.edgescombo.addItem(os.path.split(file)[1]) 
    112              
     112 
    113113        self.filecombo.updateGeometry() 
    114114        self.datacombo.updateGeometry() 
    115115        self.edgescombo.updateGeometry() 
    116       
     116 
    117117    def activateLoadedSettings(self): 
    118118        # remove missing data set names 
     
    120120        self.recentDataFiles = filter(os.path.exists, self.recentDataFiles) 
    121121        self.recentEdgesFiles = filter(os.path.exists, self.recentEdgesFiles) 
    122          
     122 
    123123        self.recentFiles.append("(none)") 
    124124        self.recentDataFiles.append("(none)") 
    125125        self.recentEdgesFiles.append("(none)") 
    126126        self.setFileLists() 
    127          
     127 
    128128        if len(self.recentFiles) > 0 and os.path.exists(self.recentFiles[0]): 
    129129            self.selectNetFile(0) 
     
    134134                os.path.exists(self.recentDataFiles[1]): 
    135135            self.selectDataFile(1) 
    136              
     136 
    137137        # if links not loaded with the network, load previous links     
    138138        if len(self.recentEdgesFiles) > 1 and \ 
     
    140140                os.path.exists(self.recentEdgesFiles[1]): 
    141141            self.selectEdgesFile(1) 
    142          
     142 
    143143    # user selected a graph file from the combo box 
    144144    def selectNetFile(self, n): 
     
    149149        elif n: 
    150150            self.browseNetFile(1) 
    151              
     151 
    152152        if len(self.recentFiles) > 0: 
    153             self.setFileLists()   
     153            self.setFileLists() 
    154154            self.openFile(self.recentFiles[0]) 
    155      
     155 
    156156    # user selected a data file from the combo box 
    157157    def selectEdgesFile(self, n): 
     
    164164            self.setFileLists() 
    165165            self.addEdgesFile(self.recentEdgesFiles[0]) 
    166      
     166 
    167167    def selectDataFile(self, n): 
    168168        if n < len(self.recentDataFiles) : 
     
    174174            self.setFileLists() 
    175175            self.addDataFile(self.recentDataFiles[0]) 
    176              
     176 
    177177    def readingFailed(self, infoa='No data loaded', infob='', infoc='', infod=''): 
    178178        self.graph = None 
     
    181181        self.infoa.setText(infoa) 
    182182        self.infob.setText(infob) 
    183         self.infoc.setText(infoc)             
     183        self.infoc.setText(infoc) 
    184184        self.infod.setText(infod) 
    185      
     185 
    186186    def openFile(self, fn): 
    187187        """Read network from file.""" 
    188          
     188 
    189189        # read network file 
    190190        if fn == "(none)": 
    191191            self.readingFailed() 
    192             return  
    193          
     192            return 
     193 
    194194        fileExt = lower(os.path.splitext(fn)[1]) 
    195195        if not fileExt in (".net", ".gml", ".gpickle"): 
    196196            self.readingFailed(infob='Network file type not supported') 
    197197            return 
    198          
     198 
    199199        #try: 
    200200        net = Orange.network.readwrite.read(fn, auto_table=self.auto_table) 
    201          
     201 
    202202        #except: 
    203203        #    self.readingFailed(infob='Could not read file') 
    204204        #    return 
    205          
     205 
    206206        if net == None: 
    207207            self.readingFailed(infob='Error reading file') 
     
    213213        else: 
    214214            self.auto_items = None 
    215          
     215 
    216216        self.infoa.setText("%d nodes" % net.number_of_nodes()) 
    217          
     217 
    218218        if net.is_directed(): 
    219219            self.infob.setText("Directed graph") 
    220220        else: 
    221221            self.infob.setText("Undirected graph") 
    222          
     222 
    223223        # make new data and send it 
    224224        fName = os.path.split(fn)[1] 
     
    229229            #data.name = fName 
    230230            pass 
    231              
     231 
    232232        self.graph = net 
    233          
     233 
    234234        # Find items data file for selected network 
    235235        items_candidate = os.path.splitext(fn)[0] + ".tab" 
     
    246246            self.recentDataFiles.insert(0, items_candidate) 
    247247        else: 
    248             if '(none)' in self.recentDataFiles:  
     248            if '(none)' in self.recentDataFiles: 
    249249                self.recentDataFiles.remove('(none)') 
    250250            self.recentDataFiles.insert(0, '(none)') 
    251          
     251 
    252252        # Find links data file for selected network 
    253         links_candidate = os.path.splitext(fn)[0] + "_links.tab"  
     253        links_candidate = os.path.splitext(fn)[0] + "_links.tab" 
    254254        if os.path.exists(links_candidate): 
    255255            self.readEdgesFile(links_candidate) 
    256256            self.recentEdgesFiles.insert(0, links_candidate) 
    257257        else: 
    258             if '(none)' in self.recentEdgesFiles:  
     258            if '(none)' in self.recentEdgesFiles: 
    259259                self.recentEdgesFiles.remove('(none)') 
    260260            self.recentEdgesFiles.insert(0, '(none)') 
    261          
     261 
    262262        self.setFileLists() 
    263          
     263 
    264264        self.send("Network", self.graph) 
    265265        if self.graph != None and self.graph.items() != None: 
     
    267267        else: 
    268268            self.send("Items", None) 
    269          
     269 
    270270    def addDataFile(self, fn): 
    271271        if fn == "(none)" or self.graph == None: 
    272              
     272 
    273273            if self.auto_items is not None: 
    274274                self.infoc.setText("Vertices data generated and added automatically") 
     
    277277                self.infoc.setText("No vertices data file specified") 
    278278                self.graph.set_items(None) 
    279                  
     279 
    280280            self.send("Network", self.graph) 
    281281            self.send("Items", self.graph.items()) 
    282282            return 
    283           
     283 
    284284        self.readDataFile(fn) 
    285          
     285 
    286286        self.send("Network", self.graph) 
    287287        self.send("Items", self.graph.items()) 
    288          
     288 
    289289    def readDataFile(self, fn): 
    290290        table = ExampleTable(fn) 
    291          
     291 
    292292        if len(table) != self.graph.number_of_nodes(): 
    293293            self.infoc.setText("Vertices data length does not match number of vertices") 
    294              
    295             if '(none)' in self.recentDataFiles:  
     294 
     295            if '(none)' in self.recentDataFiles: 
    296296                self.recentDataFiles.remove('(none)') 
    297                  
     297 
    298298            self.recentDataFiles.insert(0, '(none)') 
    299299            self.setFileLists() 
    300300            return 
    301          
     301 
    302302        items = self.graph.items() 
    303303        if items is not None and \ 
     
    310310            tmp = Orange.data.Table(Orange.data.Domain([xvar, yvar], False), items) 
    311311            table = Orange.data.Table([table, tmp]) 
    312              
     312 
    313313        self.graph.set_items(table) 
    314314        self.infoc.setText("Vertices data file added") 
    315          
     315 
    316316    def addEdgesFile(self, fn): 
    317317        if fn == "(none)" or self.graph == None: 
     
    321321            self.send("Items", None) 
    322322            return 
    323          
     323 
    324324        self.readEdgesFile(fn) 
    325          
     325 
    326326        self.send("Network", self.graph) 
    327327        self.send("Items", self.graph.items()) 
    328          
     328 
    329329    def readEdgesFile(self, fn): 
    330330        table = ExampleTable(fn) 
     
    333333        else: 
    334334            nEdges = len(self.graph.getEdges()) / 2 
    335              
     335 
    336336        if len(table) != nEdges: 
    337337            self.infod.setText("Edges data length does not match number of edges") 
    338              
    339             if '(none)' in self.recentEdgesFiles:  
     338 
     339            if '(none)' in self.recentEdgesFiles: 
    340340                self.recentEdgesFiles.remove('(none)') 
    341                  
     341 
    342342            self.recentEdgesFiles.insert(0, '(none)') 
    343343            self.setFileLists() 
    344344            return 
    345          
     345 
    346346        self.graph.set_links(table) 
    347347        self.infod.setText("Edges data file added") 
    348          
     348 
    349349    def browseNetFile(self, inDemos=0): 
    350350        """user pressed the '...' button to manually select a file to load""" 
    351          
     351 
    352352        "Display a FileDialog and select a file" 
    353353        if inDemos: 
     
    358358            except: 
    359359                startfile = "" 
    360                  
     360 
    361361            if not startfile or not os.path.exists(startfile): 
    362362                try: 
     
    378378                d = os.getcwd() 
    379379                if d[-12:] == "OrangeCanvas": 
    380                     startfile = d[:-12]+"doc/networks" 
     380                    startfile = d[:-12] + "doc/networks" 
    381381                else: 
    382382                    if d[-1] not in ["/", "\\"]: 
    383                         d+= "/" 
    384                     startfile = d+"doc/networks" 
     383                        d += "/" 
     384                    startfile = d + "doc/networks" 
    385385 
    386386            if not os.path.exists(startfile): 
    387                 QMessageBox.information( None, "File", "Cannot find the directory with example networks", QMessageBox.Ok + QMessageBox.Default) 
     387                QMessageBox.information(None, "File", "Cannot find the directory with example networks", QMessageBox.Ok + QMessageBox.Default) 
    388388                return 
    389389        else: 
     
    395395            else: 
    396396                startfile = self.recentFiles[0] 
    397                  
     397 
    398398        filename = unicode(QFileDialog.getOpenFileName(self, 'Open a Network File', startfile, "All network files (*.gpickle *.net *.gml)\nNetworkX graph as Python pickle (*.gpickle)\nPajek files (*.net)\nGML files (*.gml)\nAll files (*.*)")) 
    399          
     399 
    400400        if filename == "": return 
    401401        if filename in self.recentFiles: self.recentFiles.remove(filename) 
     
    403403        self.setFileLists() 
    404404        self.selectNetFile(0) 
    405          
     405 
    406406    def browseDataFile(self, inDemos=0): 
    407407        if self.graph == None: 
    408408            return 
    409          
     409 
    410410        #Display a FileDialog and select a file 
    411411        if len(self.recentDataFiles) == 0 or self.recentDataFiles[0] == "(none)": 
     
    414414                    startfile = user.home 
    415415                else: 
    416                     startfile="." 
     416                    startfile = "." 
    417417            else: 
    418418                startfile = os.path.dirname(self.recentFiles[0]) 
    419                  
     419 
    420420        else: 
    421421            startfile = self.recentDataFiles[0] 
    422                  
     422 
    423423        filename = unicode(QFileDialog.getOpenFileName(self, 'Open a Vertices Data File', startfile, 'Data files (*.tab)\nAll files(*.*)')) 
    424      
     424 
    425425        if filename == "": return 
    426426        if filename in self.recentDataFiles: self.recentDataFiles.remove(filename) 
     
    428428        self.setFileLists() 
    429429        self.addDataFile(self.recentDataFiles[0]) 
    430          
     430 
    431431    def browseEdgesFile(self, inDemos=0): 
    432432        if self.graph == None: 
    433433            return 
    434          
     434 
    435435        #Display a FileDialog and select a file 
    436436        if len(self.recentEdgesFiles) == 0 or self.recentEdgesFiles[0] == "(none)": 
     
    439439                    startfile = user.home 
    440440                else: 
    441                     startfile="." 
     441                    startfile = "." 
    442442            else: 
    443443                startfile = os.path.dirname(self.recentFiles[0]) 
    444                  
     444 
    445445        else: 
    446446            startfile = self.recentEdgesFiles[0] 
    447                  
     447 
    448448        filename = unicode(QFileDialog.getOpenFileName(self, 'Open a Edges Data File', startfile, 'Data files (*.tab)\nAll files(*.*)')) 
    449      
     449 
    450450        if filename == "": return 
    451451        if filename in self.recentEdgesFiles: self.recentEdgesFiles.remove(filename) 
     
    456456    def setInfo(self, info): 
    457457        for (i, s) in enumerate(info): 
    458             self.info[i].setText(s)             
     458            self.info[i].setText(s) 
    459459 
    460460    def sendReport(self): 
     
    467467        self.reportSettings("Edges meta data", [("File name", self.edgescombo.currentText())]) 
    468468        self.reportData(self.graph.links(), None, None) 
    469          
     469 
    470470if __name__ == "__main__": 
    471     a=QApplication(sys.argv) 
    472     owf=OWNxFile() 
     471    a = QApplication(sys.argv) 
     472    owf = OWNxFile() 
    473473    owf.activateLoadedSettings() 
    474     owf.show()   
     474    owf.show() 
    475475    a.exec_() 
    476476    owf.saveSettings() 
Note: See TracChangeset for help on using the changeset viewer.