It does work.
What the following code does is dynamiclly changing the size of labels(as
placeholders) while the gtk.WIndow is resized manually.
Here is the code in Python:

import pygtk
pygtk.require('2.0')
import gtk

class Example:
    def __init__(self):
        window = gtk.Window()
        window.connect("destroy", lambda w: gtk.main_quit())

        label = gtk.Label("place")
        label2 = gtk.Label("-holder")
        self.label, self.label2 = label, label2

        button = gtk.Button("button")
        self.button = button

        vbox = gtk.VBox()
        vbox.pack_start(label)
        vbox.pack_start(button)
        vbox.pack_start(label2)

        scrolledWindow = gtk.ScrolledWindow()
        self.scrolledWindow = scrolledWindow
        scrolledWindow.connect("size-allocate", self.changeSize)
        scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC,
gtk.POLICY_AUTOMATIC)
        scrolledWindow.set_size_request(300, 300)
        scrolledWindow.add_with_viewport(vbox)

        hadjustment = scrolledWindow.get_hadjustment()
        vadjustment = scrolledWindow.get_vadjustment()
        self.vadjustment, self.hadjustment = vadjustment, hadjustment

        window.add(scrolledWindow)
        window.show_all()

    #    label.set_size_request(-1, -1)    #should be commentted
        scrolledWindow.set_size_request(-1, -1)

    def changeSize(self, allocation ,widget):
        size = self.vadjustment.page_size
        size =int((size + 1)/2)
        self.label.set_size_request(-1, size)
        self.label2.set_size_request(-1, size)
        print "self.hadj", self.hadjustment.lower, self.hadjustment.upper
        print "self.vadjustment", self.vadjustment.page_size
        print "self.label", self.label.allocation, self.label2.allocation
        print "button", self.button.allocation

if __name__ == "__main__":
    example = Example()
    gtk.main()


On Sun, Aug 9, 2009 at 10:52 AM, cbx <[email protected]> wrote:

> Hi.
> I want a label to act as a placeholder,the size of which can be specified
> Here is the picture:
> A label,along with some other gtk.Widgets,will be put in a
> gtk.ScrolledWindow,which then be added into a gtk.Window.
> When the gtk.Window first shows,the size of label and scrolledWindow can be
> specified to certain value.But this is not the minimum one,that
> is,scrolledWindow won't prevent the gtk.Window from being resized to a
> smaller value.
>
> Something like(In Python):
> ##############################
> import gtk
>
> class Example:
>      def __init__(self):
>          window = gtk.Window()
>          scrolledWindow = gtk.ScrolledWindow()
>          vbox = gtk.VBox()
>          label = gtk.Label("example")
>          vbox.pack_start(label)
>          scrolledWindow.add_with_viewport(vbox)
>          window.add(scrolledWindow)
>          window.connect("destroy", lambda w: gtk.main_quit())
>          window.show_all()
>
> if __name__ == "__main__":
>          example = Example()
>          gtk.main()
>
>
> ########################
> I would try the hack to see if it works for this.
>
>
> On Sat, Aug 8, 2009 at 10:37 PM, Tristan Van Berkom <[email protected]> wrote:
>
>> On Fri, Aug 7, 2009 at 9:54 PM, cbx<[email protected]> wrote:
>> > Thank you,for your kind and your example!
>> > In Python,gtk.Widget.get_allocation() and gtk.Windget.allocation(as an
>> > attribute) return the same gtk.gdk.Rectange,which indeed is the actual
>> size.
>> > So i guess get the size is a solved problem now.
>> >
>> > What i need about setting the size of the widget is not about the
>> minimum
>> > one.It more like setting the 'allocation' size and not to prevent the
>> widget
>> > from resizing to a smaller size by the user manually.
>> > Maybe it's not clear,but i don't know how to explain myself better.
>>
>> What exactly do you need the label to do when it resizes ?
>>
>> Currently in GTK+ the size of text is what defines the minimum
>> size of your interface, labels float within the space they were
>> allocated, using the alignment and padding rules.
>>
>> I have seen hacks along the lines of:
>>
>>   gtk_widget_set_size_request (widget, default_width, default_height);
>>   gtk_widget_show_all (toplevel);
>>   gtk_widget_set_size_request (widget, -1, -1);
>>
>> i.e. a way to trick the hierarchy into realizing the specified widget
>> at a certain size, and then remove the constraint afterwords.
>> (Im not sure how well this works, it may break for instance if
>> gtk_container_check_resize() is called in the wrong place).
>>
>> GtkLabels that dynamically wordwrap or ellipsize also dont come
>> for free (someone please correct me if Im wrong about that, I'd
>> like to know), i.e. tricks need to be played to synchronize the
>> label's size request to a size relative to the label's parent's
>> allocation.
>>
>> Cheers,
>>           -Tristan
>>
>
>
_______________________________________________
gtk-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to