There is a much more general way of setting the width of an entry to hold
a given number of characters.  There is the width method of the GdkFont
type.  I think for most fonts, the widest character is m or w, so you
could get the proper width with this code:

 entry.set_usize(entry.get_style().font.width('m'*length), -1)

This will work correctly even if a different font is chosen in the RC
files.

James Henstridge.

--
Email: [EMAIL PROTECTED]
WWW:   http://www.daa.com.au/~james/


On Mon, 30 Nov 1998, Richard Fish wrote:

> Martin Preishuber wrote:
> > 
> > Hi there,
> > 
> > I have 2 problems with using pygtk:
> > 
> > - This one should be pretty easy ... Can i define the size of entry
> > fields
> >   somehow ? I mean without messing around with boxes ..
> 
> I use code something like this to create, for example, a GtkEntry that
> will hold 10 characters:
> 
>       length=10
>       e=GtkEntry()
>       e.set_max_length(length)
>       e.set_usize((length+2)*9,-1)
> 
> The formula in set_usize I got by trial and error, using the default
> font.  I'm not sure how to do this in a non-font-specific manner.
> 
> > - Second I want to insert the output of some program into a GtkText
> > field.
> >   I've done this this way:
> > 
> >         pipe = popen(command, "r")
> > 
> >         line = "full"
> >         while (line != ""):
> >             line = pipe.readline()
> >             if (line != ""):
> >                 text.insert_defaults(line)
> >                 mainiteration()
> >         pipe.close()
> > 
> >   Now there are a couple of problems: first the windows hangs as long as
> > no output
> 
> You want select() -- search the Python library reference...
> 
> >   comes from the pipe. second some programs overwrite the output of a
> > line (e.g
> >   those %-counter ... xx% where xx counts up) and this appears really
> > messy in
> >   the text box ...
> 
> Some programs do this with backspaces, others with carriage returns. 
> Some use real terminal addressing.  In the first two cases, you've got a
> chance.  I don't know how you would handle the terminal addressing case
> though... 
> 
> I haven't tested this, but something like this should work for the
> backspace/CR cases.  This is coded for the backspace case...all that is
> left is to include
> the select() statement where noted...
> 
> sep = "\b"
> data = ""
> eof=0
> while (not eof):
> 
>   # select here with appropriate timeout
>   # Process any pending events
>   # If no input, next loop (continue)
> 
>   tmp = pipe.read(1024)
>   if (not len(tmp)):
>     # end of data -- make sure last "line" is processed
>     tmp = sep
>     eof = 1
> 
>   # data may hold residual data from the previous read
>   data = data + tmp
>   lines = string.split(data,sep)
> 
>   # the last line may not be completed yet -- save it as 
>   # residual for the next line.  Note that above, when
>   # we reach eof, we mark the last line as completed.
>   data = lines[-1]
>   lines = lines[:-1]
> 
>   for line in lines:
>     line = string.strip(line)
>     if (len(line)):
>       # do something with line
> 
> 
> -- 
> Richard Fish                      Enhanced Software Technologies, Inc.
> Software Developer                4014 E Broadway Rd Suite 405
> [EMAIL PROTECTED]                    Phoenix, AZ  85040 
> (602) 470-1115                    http://www.estinc.com
> To unsubscribe: echo "unsubscribe" | mail [EMAIL PROTECTED]
> 

To unsubscribe: echo "unsubscribe" | mail [EMAIL PROTECTED]

Reply via email to