source: orange/orange/OrangeWidgets/Prototypes/OWLoadClassifier.py @ 7133:399ef57743a5

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