source: orange/Orange/OrangeWidgets/Prototypes/OWSaveClassifier.py @ 9671:a7b056375472

Revision 9671:a7b056375472, 4.1 KB checked in by anze <anze.staric@…>, 2 years ago (diff)

Moved orange to Orange (part 2)

Line 
1"""<name>Save Classifier</name>
2<description>Save orange classifiers to a file</description>
3<icon>icons/SaveClassifier.png</icon>
4<contact>Ales Erjavec (ales.erjavec(@at@)fri.uni-lj.si)</contact>
5<priority>3000</priority>
6"""
7
8from OWWidget import *
9import OWGUI
10import orange
11import sys, os
12
13
14class OWSaveClassifier(OWWidget):
15    settingsList = ["lastSaveFile", "filenameHistory"]
16    def __init__(self, parent=None, signalManager=None, name="Save Classifier"):
17        OWWidget.__init__(self, parent, signalManager, name, wantMainArea=False)
18       
19        self.inputs = [("Classifier", orange.Classifier, self.setClassifier)]
20       
21        self.lastSaveFile = os.path.expanduser("~/orange_classifier.pck")
22        self.filenameHistory = []
23        self.selectedFileIndex = 0
24       
25        self.loadSettings()
26       
27        #####
28        # GUI
29        #####
30        box = OWGUI.widgetBox(self.controlArea, "File",
31                              orientation="horizontal",
32                              addSpace=True)
33       
34        self.filesCombo = OWGUI.comboBox(box, self, "selectedFileIndex",
35                                         items=[os.path.basename(f) for f in self.filenameHistory],
36                                         tooltip="Select a recently saved file",
37                                         callback=self.onRecentSelection)
38       
39        self.browseButton = OWGUI.button(box, self, "...",
40                                         tooltip="Browse local file system",
41                                         callback=self.browse)
42       
43        self.browseButton.setIcon(self.style().standardIcon(QStyle.SP_DirOpenIcon))
44        self.browseButton.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
45         
46        box = OWGUI.widgetBox(self.controlArea, "Save")
47        self.saveButton = OWGUI.button(box, self, "Save current classifier",
48                                       callback=self.saveCurrentClassifier)
49       
50        self.saveButton.setEnabled(False)
51       
52        OWGUI.rubber(self.controlArea)
53       
54        self.resize(200, 100)
55       
56        self.classifier = None
57       
58       
59    def onRecentSelection(self):
60        filename = self.filenameHistory[self.selectedFileIndex]
61        self.filenameHistory.pop(self.selectedFileIndex)
62        self.filenameHistory.insert(0, filename)
63        self.filesCombo.removeItem(self.selectedFileIndex)
64        self.filesCombo.insertItem(0, os.path.basename(filename))
65        self.selectedFileIndex = 0
66   
67   
68    def browse(self):
69        filename = QFileDialog.getSaveFileName(self, "Save Classifier As ...",
70                    self.lastSaveFile, "Pickle files (*.pickle *.pck);; All files (*.*)")
71        filename = str(filename)
72        if filename:
73            if filename in self.filenameHistory:
74                self.selectedFileIndex = self.filenameHistory.index(filename)
75                self.onRecentSelection()
76                return
77           
78            self.lastSaveFile = filename
79            self.filenameHistory.insert(0, filename)
80            self.filesCombo.insertItem(0, os.path.basename(filename))
81            self.filesCombo.setCurrentIndex(0)
82            self.saveButton.setEnabled(self.classifier is not None and bool(self.filenameHistory))
83   
84           
85    def saveCurrentClassifier(self):
86        if self.classifier is not None:
87            filename = self.filenameHistory[self.selectedFileIndex]
88            import cPickle
89            self.error(0)
90            try:
91                cPickle.dump(self.classifier, open(filename, "wb"))
92            except Exception, ex:
93                self.error(0, "Could not save classifier! %s" % str(ex))
94           
95           
96    def setClassifier(self, classifier=None):
97        self.classifier = classifier
98        self.saveButton.setEnabled(classifier is not None and bool(self.filenameHistory))
99       
100   
101if __name__ == "__main__":
102    app = QApplication([])
103    w = OWSaveClassifier()
104    import orngTree
105    data = orange.ExampleTable("../../doc/datasets/iris.tab")
106    w.setClassifier(orngTree.TreeLearner(data))
107    w.show()
108    app.exec_()
109    w.saveSettings()
110   
Note: See TracBrowser for help on using the repository browser.