[Tutor] How to extract variables from GUI objects

Timo timomlists at gmail.com
Wed Aug 19 12:46:50 CEST 2015


Op 19-08-15 om 01:08 schreef Eric Kelly:
> I am a beginner with Python and would like to write a program that includes
> a GUI to run it.  I've been through a tutorial on using Python but I'm
> trying to also use Gtk and Glade to make the GUI.  I've tried to use the
> docs and other tutorials but alas I'm still stuck.
>
> The problem is simply to get the text from a combotext object.  I
> simplified the program by only including the combo object and a "Run"
> button.  The user should be able to choose a value from the list or enter a
> different value manually.  When I click the "Run" button to print the combo
> text, I think I get the memory address.  Here is the message that appears
> when I click Run:
>
> "<ComboBoxText object at 0x26a9d78 (GtkComboBoxText at 0x41ae178)>"
You are printing the actual Gtk.ComboBoxText class. Take this simple 
pure Python example:

 >>> class Foo: pass
...
 >>> f = Foo()
 >>> print(f)
<__main__.Foo object at 0x7f3f32e31630>

See the similarity?

You will have to call the get_active_text() method on the 
Gtk.ComboBoxText class to get the selected text.

API docs: 
http://lazka.github.io/pgi-docs/Gtk-3.0/classes/ComboBoxText.html#Gtk.ComboBoxText.get_active_text
Tutorial: 
http://learngtk.org/tutorials/python_gtk3_tutorial/html/comboboxtext.html

So your code becomes:

     def on_buttonRun_clicked(self,widget):
         comboText = self.builder.get_object('comboboxtext1')
         print(comboText.get_active_text())

Here are the full Gtk API docs: 
http://lazka.github.io/pgi-docs/index.html#Gtk-3.0
And here the tutorial: 
http://learngtk.org/tutorials/python_gtk3_tutorial/html/

Timo

>
> I realize that the program does not know what part of the object to get,
> but I am unclear about how to tell it where the text is.  I've tried
> assigning variable names to what I think are the appropriate user data
> values, but of course none worked.  I'm using Glade 3, Gtk+ 3, and Python
> 34.
>
> Thanks in advance for any help and suggestions (I'm sure there are other
> mistakes here too).
>
> Eric
>
>
> The Python code is here:
> --------------------------------------------------------------------
> #!C:\Python34
> from gi.repository import Gtk
>
>
> # Make a window to control the program
> class MyGI(Gtk.Window):
>
>      def __init__(self):
>          Gtk.Window.__init__(self,title='Title')
>          self.builder = Gtk.Builder()
>          self.builder.add_from_file('GI_test.glade')
>
>          # Define handlers for signals from window
>          handlersDict = {
>              'on_applicationwindow1_destroy':Gtk.main_quit,
>              'on_buttonRun_clicked':self.on_buttonRun_clicked
>              }
>
>          # Get the objects from the window
>          self.window = self.builder.get_object('applicationwindow1')
>          self.buttonRun = self.builder.get_object('buttonRun')
>
>          # Connect the signals with their handlers
>          self.builder.connect_signals(handlersDict)
>
>
>      def on_buttonRun_clicked(self,widget):
>          comboText = self.builder.get_object('comboboxtext1')
>          print(comboText)
>
>
> def main():
>      win = MyGI()
>      Gtk.main()
>
> if __name__ == '__main__':
>      main()
>
>
>
> The XML code is here:
> -----------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- Generated with glade 3.18.3 -->
> <interface>
>    <requires lib="gtk+" version="3.10"/>
>    <object class="GtkApplicationWindow" id="applicationwindow1">
>      <property name="visible">True</property>
>      <property name="can_focus">False</property>
>      <signal name="destroy" handler="on_applicationwindow1_destroy"
> swapped="no"/>
>      <child>
>        <object class="GtkBox" id="box1">
>          <property name="visible">True</property>
>          <property name="can_focus">False</property>
>          <property name="orientation">vertical</property>
>          <child>
>            <object class="GtkComboBoxText" id="comboboxtext1">
>              <property name="visible">True</property>
>              <property name="can_focus">False</property>
>              <property name="margin_bottom">5</property>
>              <items>
>                <item translatable="yes">0</item>
>                <item translatable="yes">100</item>
>                <item translatable="yes">200</item>
>              </items>
>            </object>
>            <packing>
>              <property name="expand">False</property>
>              <property name="fill">True</property>
>              <property name="position">0</property>
>            </packing>
>          </child>
>          <child>
>            <object class="GtkButton" id="buttonRun">
>              <property name="label" translatable="yes">Run</property>
>              <property name="visible">True</property>
>              <property name="can_focus">True</property>
>              <property name="receives_default">True</property>
>              <signal name="clicked" handler="on_buttonRun_clicked"
> swapped="no"/>
>            </object>
>            <packing>
>              <property name="expand">False</property>
>              <property name="fill">True</property>
>              <property name="position">1</property>
>            </packing>
>          </child>
>        </object>
>      </child>
>    </object>
> </interface>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor



More information about the Tutor mailing list