source: orange/docs/extend-widgets/rst/OWAttributeSampler.py @ 11593:6edc44eb9655

Revision 11593:6edc44eb9655, 2.9 KB checked in by Ales Erjavec <ales.erjavec@…>, 11 months ago (diff)

Updated Widget development tutorial.

Line 
1"""
2<name>Attribute Sampler</name>
3<description>Lets the user select a list of attributes and the class attribute</description>
4<icon>icons/AttributeSampler.png</icon>
5<priority>1020</priority>
6"""
7import Orange
8
9from OWWidget import *
10import OWGUI
11
12class OWAttributeSampler(OWWidget):
13    settingsList = []
14
15    # ~start context handler~
16    contextHandlers = {
17        "": DomainContextHandler(
18            "",
19            [ContextField("classAttribute", DomainContextHandler.Required),
20             ContextField("attributeList",
21                          DomainContextHandler.List +
22                          DomainContextHandler.SelectedRequired,
23                          selected="selectedAttributes")])}
24    # ~end context handler~
25
26    def __init__(self, parent=None, signalManager=None):
27        OWWidget.__init__(self, parent, signalManager, 'AttributeSampler')
28
29        self.inputs = [("Examples", Orange.data.Table, self.dataset)]
30        self.outputs = [("Examples", Orange.data.Table)]
31
32        self.icons = self.createAttributeIconDict()
33
34        self.attributeList = []
35        self.selectedAttributes = []
36        self.classAttribute = None
37        self.loadSettings()
38
39        OWGUI.listBox(self.controlArea, self, "selectedAttributes",
40                      "attributeList",
41                      box="Selected attributes",
42                      selectionMode=QListWidget.ExtendedSelection)
43
44        OWGUI.separator(self.controlArea)
45        self.classAttrCombo = OWGUI.comboBox(
46            self.controlArea, self, "classAttribute",
47            box="Class attribute")
48
49        OWGUI.separator(self.controlArea)
50        OWGUI.button(self.controlArea, self, "Commit",
51                     callback=self.outputData)
52
53        self.resize(150,400)
54
55
56    def dataset(self, data):
57        self.closeContext()
58
59        self.classAttrCombo.clear()
60        if data:
61            self.attributeList = [(attr.name, attr.varType)
62                                  for attr in data.domain]
63            self.selectedAttributes = []
64            for attrName, attrType in self.attributeList:
65                self.classAttrCombo.addItem(self.icons[attrType], attrName)
66            self.classAttribute = 0
67        else:
68            self.attributeList = []
69            self.selectedAttributes = []
70            self.classAttrCombo.addItem("")
71
72        self.openContext("", data)
73
74        self.data = data
75        self.outputData()
76
77
78    def outputData(self):
79        if not self.data:
80            self.send("Examples", None)
81        else:
82            newDomain = Orange.data.Domain(
83                [self.data.domain[i] for i in self.selectedAttributes],
84                self.data.domain[self.classAttribute])
85
86            newData = Orange.data.Table(newDomain, self.data)
87            self.send("Examples", newData)
88
89
90if __name__=="__main__":
91    appl = QApplication(sys.argv)
92    ow = OWAttributeSampler()
93    ow.show()
94
95    data = Orange.data.Table('iris.tab')
96    ow.dataset(data)
97
98    appl.exec_()
Note: See TracBrowser for help on using the repository browser.