source: orange/Orange/OrangeWidgets/Classify/OWLoadClassifier.py @ 11765:1546cd04481b

Revision 11765:1546cd04481b, 3.7 KB checked in by Ales Erjavec <ales.erjavec@…>, 5 months ago (diff)

Fixed widget layouts.

Line 
1"""<name>Load Classifier</name>
2<description>Load saved orange classifiers from a file</description>
3<icon>icons/LoadClassifier.svg</icon>
4<contact>Ales Erjavec (ales.erjavec(@at@)fri.uni.uni-lj.si)</contact>
5<priority>3050</priority>
6"""
7
8from OWWidget import *
9
10import OWGUI
11import orange
12
13
14class OWLoadClassifier(OWWidget):
15    settingsList = ["filenameHistory", "selectedFileIndex", "lastFile"]
16   
17    def __init__(self, parent=None, signalManager=None, name="Load Classifier"):
18        OWWidget.__init__(self, parent, signalManager, name,
19                          wantMainArea=False, resizingEnabled=False)
20       
21        self.outputs = [("Classifier", orange.Classifier, Dynamic)]
22       
23        self.filenameHistory = []
24        self.selectedFileIndex = 0
25        self.lastFile = os.path.expanduser("~/orange_classifier.pck")
26       
27        self.loadSettings()
28       
29        self.filenameHistory= filter(os.path.exists, self.filenameHistory)
30       
31        #####
32        # GUI
33        #####
34       
35        box = OWGUI.widgetBox(self.controlArea, "File", orientation="horizontal", addSpace=True)
36        self.filesCombo = OWGUI.comboBox(box, self, "selectedFileIndex", 
37                                         items = [os.path.basename(p) for p in self.filenameHistory],
38                                         tooltip="Select a recent file", 
39                                         callback=self.onRecentSelection)
40        self.filesCombo.setMinimumWidth(200)
41
42        self.browseButton = OWGUI.button(box, self, "...", callback=self.browse,
43                                         tooltip = "Browse file system")
44
45        self.browseButton.setIcon(self.style().standardIcon(QStyle.SP_DirOpenIcon))
46        self.browseButton.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
47       
48        OWGUI.rubber(self.controlArea)
49       
50        self.resize(200, 50)
51       
52        if self.filenameHistory:
53            self.loadAndSend()
54       
55       
56    def onRecentSelection(self):
57        filename = self.filenameHistory[self.selectedFileIndex]
58        self.filenameHistory.pop(self.selectedFileIndex)
59        self.filenameHistory.insert(0, filename)
60        self.filesCombo.removeItem(self.selectedFileIndex)
61        self.filesCombo.insertItem(0, os.path.basename(filename))
62        self.selectedFileIndex = 0
63       
64        self.loadAndSend()
65       
66    def browse(self):
67        filename = QFileDialog.getOpenFileName(self, "Load Classifier From File",
68                        self.lastFile, "Pickle files (*.pickle *.pck)\nAll files (*.*)")
69        filename = unicode(filename)
70        if filename:
71            if filename in self.filenameHistory:
72                self.selectedFileIndex = self.filenameHistory.index(filename)
73                self.onRecentSelection()
74                return
75            self.lastFile = filename
76            self.filenameHistory.insert(0, filename)
77            self.filesCombo.insertItem(0, os.path.basename(filename))
78            self.filesCombo.setCurrentIndex(0)
79            self.selectedFileIndex = 0
80            self.loadAndSend()
81           
82    def loadAndSend(self):
83        filename = self.filenameHistory[self.selectedFileIndex]
84        import cPickle
85        self.error([0, 1])
86        try:
87            classifier = cPickle.load(open(filename, "rb"))
88        except Exception, ex:
89            self.error(0, "Could not load classifier! %s" % str(ex))
90            return
91       
92        if not isinstance(classifier, orange.Classifier):
93            self.error(1, "'%s' is not an orange classifier" % os.path.basename(filename))
94            return 
95       
96        self.send("Classifier", classifier)
97       
98if __name__ == "__main__":
99    app = QApplication([])
100    w = OWLoadClassifier()
101    w.show()
102    app.exec_()
103    w.saveSettings() 
Note: See TracBrowser for help on using the repository browser.