[pygtk] Passing signals back between Objects
Peter Brooks
peter at theneb.co.uk
Sun Aug 19 20:45:14 WST 2007
Hi all, I'm trying the following.
Firstly I extend a base class 'settingSection' into 'streamSettings', I then
chuck in the custom data into 'streamSettings' and then I am able to call
methods such as 'New stream', 'Edit Stream'.
'New Stream' and 'Edit Stream' open up a new object of gtk.Dialog called
'settingsForm', of which I need to pass the data back from 'settingsForm' to
'streamSettings'.
Code relating to this is below:
class settingsSection(gtk.Frame):
def __init__(self,data):
gtk.Frame.__init__(self)
########
# Content
########
self.sl =3D sl =3D scrollList( data["listColumns"] )
self.data =3D data
for item in data["items"]:
row =3D []
for col in data["listColumns"]:
row.append(data["itemsList"][item][col])
sl.append_row(row)
########
# UI Manager
########
uimanager =3D gtk.UIManager()
uimanager.add_ui_from_string(data["ui"])
actiongroup =3D gtk.ActionGroup("Settings")
actiongroup.add_actions( data["actions"] )
uimanager.insert_action_group(actiongroup, 0)
########
# Layout
########
menubar =3D uimanager.get_widget('/menu')
vBox =3D gtk.VBox(False,2)
vBox.show()
vBox.pack_start(sl)
vBox.pack_start(menubar)
self.add(vBox)
self.show_all()
def newRow(self):
items =3D []
for item in self.data["itemColumns"]:
items.append( (item, "") )
settingsForm("Stream",OrderedDict(items))
def editRow(self):
label =3D self.sl.get_current()
if label =3D=3D None:
return
items =3D []
for item in self.data["itemColumns"]:
items.append( (item,str(self.data["items"][label][item])) )
settingsForm("Stream", OrderedDict(items) )
###########################################################################=
#####
class streamSettings(settingsSection):
def __init__(self,db):
########
# Menu
########
ui =3D '''<ui>
<toolbar name=3D"menu">
<toolitem action=3D"New Stream"/>
<separator/>
<toolitem action=3D"Edit Stream"/>
<separator/>
<toolitem action=3D"deleteStream"/>
</toolbar>
</ui>'''
actions =3D [('New Stream',gtk.STOCK_NEW, '_New Stream',None,
'Create a new stream',lambda x:self.newRow()),
('Edit Stream',gtk.STOCK_EDIT, '_Edit Stream', None,
'Edit the selected stream',lambda x:self.editRow()),
('deleteStream',gtk.STOCK_DELETE, '_Delete Stream', None,
'Delete the selected stream',lambda x:sl.remove_row())]
########
# settingItems
########
items =3D {}
itemsList =3D {}
connections =3D db.select
("streams","host,port,name","enabled=3D'TRUE'","name")
for connection in connections:
items[connection["name"]] =3D {
"host": connection["host"],
"port": connection["port"] }
itemsList[connection["name"]] =3D {
"name" : connection["name"],
"status": "Dummy" }
data =3D {"ui" : ui ,
"listColumns" : ("name", "status"),
"actions" : actions ,
"itemColumns" : ["Name","Host","Port"],
"itemsList" : itemsList,
"items" : items
}
settingsSection.__init__(self,data)
def saveData(self,data):
if count(select("streams","name","enabled=3D'TRUE' and
name=3D'"+data["name"]+"'"))=3D=3D0:
db.insert("streams",data)
else:
db.update("streams",data,"name=3D"+data["name"])
###########################################################################=
#####
###########################################################################=
#########################
###########################################################################=
#########################
class settingsForm(gtk.Dialog):
def __init__(self,title,entries):
gtk.Dialog.__init__(self,title,self,
gtk.DIALOG_MODAL |
gtk.DIALOG_DESTROY_WITH_PARENT,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OK, gtk.RESPONSE_OK))
self.set_size_request(300,50*len(entries))
self.show()
vBox =3D self.get_child()
table =3D gtk.Table(2,3)
#Render the form fields
row =3D 0;
for entry in entries:
table.attach(gtk.Label(entry),0,1,row,row+1)
inputBox =3D gtk.Entry(10)
inputBox.set_text(entries[entry])
table.attach(inputBox,1,2,row,row+1)
row+=3D1
table.show_all()
vBox.add(table)
#Handle button reponses
result =3D self.run()
if result =3D=3D gtk.RESPONSE_OK or result =3D=3D
gtk.RESPONSE_APPLY:
self.saveData()
if result =3D=3D gtk.RESPONSE_CANCEL or result =3D=3D gtk.RESPONSE_=
OK:
self.destroy()
def saveData(self):
print ''
Cheers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.daa.com.au/pipermail/pygtk/attachments/20070819/fdbc8763/at=
tachment.htm
More information about the pygtk
mailing list