source: orange/orange/OrangeWidgets/Prototypes/OWLoadAssocRules.py @ 9121:795ab25c3004

Revision 9121:795ab25c3004, 3.5 KB checked in by ales_erjavec <ales.erjavec@…>, 3 years ago (diff)

Added Load/Save Assoc. Rules widget pair.

Line 
1"""<name>Load Association Rules</name>
2"""
3
4from OWWidget import *
5import OWGUI
6
7import Orange
8from Orange import associate
9
10class OWLoadAssocRules(OWWidget):
11    settingsList = ["filename_history", "selected_file_index", "last_file"]
12   
13    def __init__(self, parent=None, signalManager=None, name="Load Rules"):
14        OWWidget.__init__(self, parent, signalManager, name, wantMainArea=False)
15       
16        self.outputs = [("Rules", associate.AssociationRules, Dynamic)]
17       
18        self.filename_history = []
19        self.selected_file_index = 0
20        self.last_file = os.path.expanduser("~/orange_rules.pck")
21       
22        self.loadSettings()
23       
24        self.filename_history= filter(os.path.exists, self.filename_history)
25       
26        #####
27        # GUI
28        #####
29       
30        box = OWGUI.widgetBox(self.controlArea, "File", orientation="horizontal", addSpace=True)
31        self.files_combo = OWGUI.comboBox(box, self, "selected_file_index", 
32                                         items = [os.path.basename(p) for p in self.filename_history],
33                                         tooltip="Select a recent file", 
34                                         callback=self.on_recent_selection)
35       
36        self.browseButton = OWGUI.button(box, self, "...", callback=self.browse,
37                                         tooltip = "Browse file system")
38
39        self.browseButton.setIcon(self.style().standardIcon(QStyle.SP_DirOpenIcon))
40        self.browseButton.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
41       
42        OWGUI.rubber(self.controlArea)
43       
44        self.resize(200, 50)
45       
46        if self.filename_history:
47            self.load_and_send()
48       
49       
50    def on_recent_selection(self):
51        filename = self.filename_history[self.selected_file_index]
52        self.filename_history.pop(self.selected_file_index)
53        self.filename_history.insert(0, filename)
54        self.files_combo.removeItem(self.selected_file_index)
55        self.files_combo.insertItem(0, os.path.basename(filename))
56        self.selected_file_index = 0
57       
58        self.load_and_send()
59       
60    def browse(self):
61        filename = QFileDialog.getOpenFileName(self, "Load Rules From File",
62                        self.last_file, "Pickle files (*.pickle *.pck)\nAll files (*.*)")
63        filename = str(filename)
64        if filename:
65            if filename in self.filename_history:
66                self.selected_file_index = self.filename_history.index(filename)
67                self.on_recent_selection()
68                return
69            self.last_file = filename
70            self.filename_history.insert(0, filename)
71            self.files_combo.insertItem(0, os.path.basename(filename))
72            self.files_combo.setCurrentIndex(0)
73            self.selected_file_index = 0
74            self.load_and_send()
75           
76    def load_and_send(self):
77        filename = self.filename_history[self.selected_file_index]
78        import cPickle
79        self.error([0, 1])
80        try:
81            rules = cPickle.load(open(filename, "rb"))
82        except Exception, ex:
83            self.error(0, "Could not load rules! %s" % str(ex))
84            return
85       
86        if not isinstance(rules, associate.AssociationRules):
87            self.error(1, "'%s' is not an instance of %r" % (os.path.basename(filename),
88                                                             associate.AssociationRules))
89            return 
90       
91        self.send("Rules", rules)
Note: See TracBrowser for help on using the repository browser.