On Tuesday 24 February 2009 12:17:03 pm Sibylle Koczian wrote:
> Hello,
>
> if the controls on a form contain a dRadiolist connected to a database
> field, and if the corresponding dataset is empty, for example by
> applying a filter, then the application crashes with an AttributeError:
> 'dRadioList' object has no attribute 'Clear'.
>
> Very simple example to demonstrate this:
>
> SQLite database "mytest.db", containing a table "person":
>
> create table person(
> idn integer primary key,
> firstname varchar(20),
> lastname varchar(20) not null,
> gender char(1) not null check(gender in 'F', 'M')
> );
>
> insert into person (firstname, lastname, gender) values ('Funkel',
> 'Friedhelm',
> 'M');
> insert into person (firstname, lastname, gender) values ('Prinz', 'Birgit',
> 'F');
> insert into person (firstname, lastname, gender) values ('Bruchhagen',
> 'Heribert', 'M');
>
> Application code:
>
> #!/usr/bin/env python
> # -*- coding: utf-8 -*-
> # sqlite_feldtest.py
>
> import dabo
> dabo.ui.loadUI("wx")
>
> class BizPerson(dabo.biz.dBizobj):
> def initProperties(self):
> self.DataSource = "person"
> self.KeyField = "id"
> self.AutoPopulatePK = True
> self.UserSQL = """SELECT id, firstname, lastname, gender FROM
> person"""
> self.DefaultValues["gender"] = "M"
> self.DataStructure = [("id", "I", True, "person", "id"),
> ("firstname", "C", False, "person", "firstname"),
> ("lastname", "C", False, "person", "lastname"),
> ("gender", "C", False, "person", "gender")]
>
> class FrmTest(dabo.ui.dForm):
> def afterInit(self):
> self.Sizer = dabo.ui.dSizer("v")
> panel = dabo.ui.dPanel(self)
> self.Sizer.append1x(panel)
> panel.Sizer = dabo.ui.dSizer("v")
> grPerson = dabo.ui.dGrid(panel, ColumnCount=4)
> grPerson.DataSource = "person"
> grPerson.Columns[0].Caption = "ID"
> grPerson.Columns[0].DataField = "id"
> grPerson.Columns[1].Caption = "First name"
> grPerson.Columns[1].DataField = "firstname"
> grPerson.Columns[2].Caption = "Last name"
> grPerson.Columns[2].DataField = "lastname"
> grPerson.Columns[3].Caption = "Gender"
> grPerson.Columns[3].DataField = "gender"
> panel.Sizer.append1x(grPerson)
> hs = dabo.ui.dSizer("h")
> hs.append(dabo.ui.dButton(panel, Caption="Last name 'B..'",
> OnHit=self.OnFilterB))
> hs.append(dabo.ui.dButton(panel, Caption="Last name 'C..'",
> OnHit=self.OnFilterC))
> hs.append(dabo.ui.dButton(panel, Caption="All",
> OnHit=self.OnNoFilter))
> panel.Sizer.append(hs)
> gs = dabo.ui.dGridSizer(MaxCols=2, HGap=3, VGap=3)
> gs.setColExpand(True, 1)
> gs.append(dabo.ui.dLabel(panel, Caption="First name"),
> halign="right")
> gs.append(dabo.ui.dTextBox(panel, DataSource="person",
> DataField="firstname"))
> gs.append(dabo.ui.dLabel(panel, Caption="Last name"),
> halign="right")
> gs.append(dabo.ui.dTextBox(panel, DataSource="person",
> DataField="lastname"))
> gs.append(dabo.ui.dLabel(panel, Caption="Gender"),
> halign="right")
> rlGender = dabo.ui.dRadioList(panel, DataSource="person",
> DataField="gender",
> Orientation="horizontal")
> rlGender.Choices = ["Female", "Male"]
> rlGender.Keys = ["F", "M"]
> rlGender.ValueMode = "Key"
> gs.append(rlGender)
> panel.Sizer.append(gs, 0, "x")
> self.layout()
>
> def afterInitAll(self):
> self.requery()
>
> def applyFilter(self, startchar):
> self.removeFilter()
> try:
> self.PrimaryBizobj.filter("lastname", startchar,
> "startswith")
> except dabo.dException.NoRecordsException:
> pass
> self.update()
>
> def OnFilterB(self, evt):
> self.applyFilter("B")
>
> def OnFilterC(self, evt):
> self.applyFilter("C")
>
> def OnNoFilter(self, evt):
> self.removeFilters()
> self.update()
>
> def createBizobjs(self):
> self.Application.addConnectFile("sqlite_feldtest.cnxml")
> self.Connection =
> self.Application.getConnectionByName("SQLite_Leute")
> biz = BizPerson(self.Connection)
> self.addBizobj(biz)
>
> if __name__ == "__main__":
> app = dabo.dApp()
> app.MainFormClass = FrmTest
> app.start()
>
>
> Clicking on the button "Last name 'C..'":
>
> s...@elend:~/bin/dabo_sib> python sqlite_leute.py
>
> Traceback (most recent call last):
>
> File
> "/usr/lib/python2.6/site-packages/wx-2.8-gtk2-unicode/wx/_misc.py", line
> 1341, in Notify
>
> self.notify()
>
> File
> "/usr/lib/python2.6/site-packages/wx-2.8-gtk2-unicode/wx/_core.py", line
> 14653, in Notify
>
> self.result = self.callable(*self.args, **self.kwargs)
>
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/uiwx/dForm.py", line 122, in
> __update
>
>
> super(BaseForm, self).update()
>
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/uiwx/dPemMixin.py", line
> 1242, in
> update
> self.raiseEvent(dEvents.Update)
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/uiwx/dPemMixin.py", line
> 947, in
> raiseEvent
> super(dPemMixin, self).raiseEvent(eventClass, nativeEvent, *args,
> **kwargs)
> File "/home/sib/svn_src/dabo_trunk/dabo/lib/eventMixin.py", line 93, in
> raiseEvent
> bindingFunction(event)
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/uiwx/dPemMixin.py", line
> 1223, in
> __onUpdate
> self.update()
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/uiwx/dPemMixin.py", line
> 1242, in
> update
> self.raiseEvent(dEvents.Update)
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/uiwx/dPemMixin.py", line
> 947, in
> raiseEvent
> super(dPemMixin, self).raiseEvent(eventClass, nativeEvent, *args,
> **kwargs)
> File "/home/sib/svn_src/dabo_trunk/dabo/lib/eventMixin.py", line 93, in
> raiseEvent
> bindingFunction(event)
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/uiwx/dPemMixin.py", line
> 1223, in
> __onUpdate
> self.update()
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/dDataControlMixinBase.py",
> line 97,
> in update
> self.__dataUpdate()
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/dDataControlMixinBase.py",
> line 116, in __dataUpdate
> self.Value = self.getBlankValue()
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/uiwx/dControlItemMixin.py",
> line
> 380, in _setValue
> self.KeyValue = value
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/uiwx/dControlItemMixin.py",
> line
> 235, in _setKeyValue
> self._resetChoices()
> File "/home/sib/svn_src/dabo_trunk/dabo/ui/uiwx/dControlItemMixin.py",
> line
> 109, in _resetChoices
> self.Clear()
> AttributeError: 'dRadioList' object has no attribute 'Clear'
>
>
> And that doesn't look right, does it?
>
> Platform: GTK
> Python Version: 2.6 on linux2
> Dabo Version: Version 0.9.1; Revision 5075M
> UI Version: 2.8.8.1 on wxGTK (gtk2)
>
> Same thing on Windows:
>
> Platform: Win
> Python Version: 2.6.1 on win32
> Dabo Version: Version 0.9.1; Revision ~5067
> UI Version: 2.8.9.2 on wxMSW
>
> Regards
> Sibylle
I'm not at my desk at the moment - but I think if you add 'PositionValue = ?'
fixes that issue.
--
John Fabiani
_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-users
Searchable Archives: http://leafe.com/archives/search/dabo-users
This message:
http://leafe.com/archives/byMID/[email protected]