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

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

Fixed widget layouts.

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