A Qua, 2004-01-14 �s 14:22, John Hunter escreveu:
> While I know it is generally frowned up on to use stock buttons for
> purposes other than their original intentions to preserve consistent
> look and feel across applications, I often find myself wanting to use
> a different label with a stock icon.
>
> I suspect this isn't possible from my reading of the docs, but I
> thought I'd ask. I'd like to be able to do something like
>
> button = gtk.Button(stock=gtk.STOCK_CANCEL)
> button.show()
> button.set_use_stock(gtk.TRUE)
> button.set_label('Hide')
I copied some code from gedit that did this. Later I converted it to
python. You can find it in attachment.
>
> But this doesn't work.
>
> Is this possible?
>
> Thanks,
> John Hunter
> _______________________________________________
> pygtk mailing list [EMAIL PROTECTED]
> http://www.daa.com.au/mailman/listinfo/pygtk
> Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
--
Gustavo Jo�o Alves Marques Carneiro
<[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
The universe is always one step beyond logic.
#! /usr/bin/env python
import pygtk; pygtk.require("2.0")
import bonobo
import Bonobo
import gnome.vfs
import gtk, gobject
# missing consts from typelib
Bonobo_Storage_READ = 1
Bonobo_Storage_WRITE = 2
Bonobo_Storage_CREATE = 4
Bonobo_Storage_FAILIFEXIST = 8
Bonobo_Storage_COMPRESSED = 16
Bonobo_Storage_TRANSACTED = 32
def get_stream(uri, for_writing):
"""Returns a Bonobo_Stream for reading or writing to the specified URI"""
vfs_uri = gnome.vfs.URI(uri)
shortname = vfs_uri.short_name
dirname = str(vfs_uri.parent)
iid = "vfs:" + bonobo.moniker_util_escape(dirname, 0)
storage = bonobo.get_object(iid, "IDL:Bonobo/Storage:1.0")
try:
if for_writing:
try:
storage.erase(shortname)
except Bonobo.Storage.NoPermission:
pass # ignore error (file may not exist)
stream = storage.openStream(shortname, Bonobo_Storage_WRITE)
else:
stream = storage.openStream(shortname, Bonobo_Storage_READ)
finally:
storage.unref()
return stream
# copied from gedit; converted to python
def button_new_with_stock_image(text, stock_id):
button = gtk.Button()
if button.child:
button.remove(button.child)
label = gobject.new(gtk.Label, label=text, use_underline=True)
item = gtk.stock_lookup(stock_id)
if item is not None:
label.set_mnemonic_widget(button)
image = gtk.image_new_from_stock(stock_id, gtk.ICON_SIZE_BUTTON)
hbox = gtk.HBox(False, 2)
align = gtk.Alignment(0.5, 0.5, 0.0, 0.0)
hbox.pack_start(image, False, False, 0)
hbox.pack_end(label, False, False, 0)
button.add(align)
align.add(hbox)
align.show_all()
else:
label.set_mnemonic_widget(button)
label.set_alignment(0.5, 0.5)
label.show()
button.add(label)
gtk_widget_show(label);
return button
# copied from gedit, converted to python
def dialog_add_button(dialog, text, stock_id, response_id):
button = button_new_with_stock_image(text, stock_id)
button.set_flags(gtk.CAN_DEFAULT)
button.show()
dialog.add_action_widget(button, response_id)
return button
if __name__ == '__main__':
# unit testing
print "trying to get stream for writing"
stream = get_stream("file:///tmp/foo.bar", True)
stream.write("hello world")
stream.unref()
print "trying to get stream for reading"
stream = get_stream("file:///tmp/foo.bar", False)
print stream.read(bonobo.stream_client_get_length(stream))
stream.unref()
print "seems to work"
_______________________________________________
pygtk mailing list [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/