[Glade-users] number entry
John Thornton
jthornton at gnipsel.com
Wed Nov 28 13:40:39 UTC 2012
Dave,
I apologize for not mentioning that I'm using Python... What I tried was
to make a main glade file and a keypad glade file and bring them both
into my python program with the builder but could not get the two
screens to show up correctly. Either the keypad screen would show up or
I got a blank screen.
So next I thought I would try making a dialog box and I was able to get
that working. In the process I discovered I had been doing some things
the long hand way like using a separate function for each number. What I
stumbled across was the widget is passed to the function so I could use
that to get the label of the button and know which entry had called the
keypad. Of course other keys like Clear and Save have their own
functions.
This function stores the widget that runs the dialog.
def on_entry_button_press_event(self, widget, data=None):
self.current_entry = widget
self.response = self.dialog1.run()
This function adds the number pressed to the keyboard label
def on_kb_clicked(self, widget, data=None):
self.current = self.num_entry.get_text()
self.current = self.current + widget.get_label()
self.num_entry.set_text(self.current)
This function saves the numbers to the calling entry box and closes the dialog
def on_kb_save_clicked(self, widget, data=None):
self.current_entry.set_text(self.num_entry.get_text())
self.num_entry.set_text('')
self.dialog1.hide()
All in all it works fine, but I was looking for a modular thing with the
keypad being in it's own glade file and being able to load it into
another file so to speak.
Thanks
John
On Tue, 2012-11-27 at 10:31 -0800, David Buchan wrote:
> Ah. I missed one aspect I see you desired.
> I'm not so sure you can have an Entry send a signal unless the Enter
> key is pressed (which would be on_entry1_activate).
> I don't see anything like "on_entry1_clicked". Perhaps someone else
> can advise.
>
>
> Instead, you might consider having the Entry as planned, and a
> callback for it, so the user can enter the number via the entry, but
> then also...
>
>
> Maybe add a little button beside it labelled "Use Keypad" or
> something, that pops-up the keypad.
> Then you're back to using what I had in my previous email.
>
>
> Dave
>
>
>
>
> ______________________________________________________________________
> From: David Buchan <pdbuchan at yahoo.com>
> To: John Thornton <jthornton at gnipsel.com>; Glade Users List
> <glade-users at lists.ximian.com>
> Sent: Tuesday, November 27, 2012 1:22 PM
> Subject: Re: [Glade-users] number entry
>
>
> Hi John,
>
> I would try to do it by having the number pad being composed of
> Buttons.
> Then I would have a callback for each of the buttons. Each callback
> would:
> - Take the existing number from the entry (if length is non-zero).
> That will be a string.
> - Then take print the number associated with the button that was
> clicked as a character and append it to the string in the entry. I use
> C, so here's some unchecked C code...
>
> I pass the number around in a struct, so I define it here:
>
> typedef struct _ProgData ProgData;
> struct _ProgData {
> gint magic_number;
> // You'd probably have other stuff in here.
> }
>
> I assume the entry was grabbed from the glade file using gtkbuilder?
> We need to get the entry object:
>
> data->entry1 = GTK_WIDGET (gtk_builder_get_object (builder,
> "entry1")); // Our number
>
> Same for the buttons, but only if the keypad has popped-up. (I use 10
> for 0 because I'm not sure you're allowed to name a button as
> 'button0'.)
> data->button10 = GTK_BUTTON (gtk_builder_get_object (builder,
> "button10")); // Keypad button 0
> data->button1 = GTK_BUTTON (gtk_builder_get_object (builder,
> "button1")); // Keypad button 1
> data->button2 = GTK_BUTTON (gtk_builder_get_object (builder,
> "button2")); // Keypad button 2
> ...etc...
> data->button9 = GTK_BUTTON (gtk_builder_get_object (builder,
> "button9")); // Keypad button 9
>
> Then the callback for the button labelled "3", for example, might be
> something roughly like:
>
> // Callback to add a digit '3' to the number entry.
> gboolean
> on_button3_clicked (GtkButton *button, ProgData *data)
> {
> const gchar *entry1_text;
> char value[256];
>
> entry1_text = gtk_entry_get_text (GTK_ENTRY (entry1));
>
> memset (value, 0, 256);
> sprintf (value, "%s3", entry1_text);
>
> data->magic_number = atoi (value);
> gtk_entry_set_text (GTK_ENTRY (data->entry1), value);
>
> return (TRUE);
> }
>
> I *think* that should do it, unless I misunderstood.
>
> I wonder if you really need that to be an entry. You can have the
> buttons update the actual number in the variable and show it in a
> textview instead. Just a thought. I suppose with the text entry, the
> user can use the number pad or type the number in directly. Maybe you
> desire that extra option.
>
> Dave
>
>
> ______________________________________________________________________
> From: John Thornton <jthornton at gnipsel.com>
> To: Glade Users List <glade-users at lists.ximian.com>
> Sent: Monday, November 26, 2012 12:55 PM
> Subject: [Glade-users] number entry
>
>
> I want to create a number entry glade and have done so. Where I'm
> having
> a problem is to bring that into my main program. What I'm after is
> when
> I click on an entry box the number keypad pops up so I can enter the
> numbers and when I press the save button it puts the numbers into the
> entry box.
>
> Is this possible? Any examples anywhere?
>
> Thanks
> John
>
> _______________________________________________
> Glade-users maillist - Glade-users at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/glade-users
>
>
>
>
> _______________________________________________
> Glade-users maillist - Glade-users at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/glade-users
>
>
>
More information about the Glade-users
mailing list