Gtk.TextBuffer problem on converting from GTK+ 2 to GTK+ 3

Chris Green cl at isbd.net
Thu Jul 30 12:23:32 EDT 2020


I'm converting a program from Python 2 gtk+ 2 to Python 3 and gtk+ 3.
It's mostly gone reasonably smoothly but I can't get multi-line text
entry to work.

The class that provides text entry (both single and multi-line) is:-

    # 
    # 
    # Field on the GUI 
    # 
    class guiField:
        widget = None
        lines = 1
        # 
        # 
        # Initialise the field 
        # 
        def __init__(self, lines=1):
            self.lines = lines
            if (self.lines > 1):
                self.buffer = Gtk.TextBuffer()
                self.view = Gtk.TextView()
                self.view.set_size_request(-1, 24 * lines)
                self.view.set_accepts_tab(False)
                # self.widget = self.view 
                self.widget = Gtk.ScrolledWindow()
                self.widget.add(self.view)
                self.widget.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
                self.widget.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
            else:
                self.widget = Gtk.Entry()
        # 
        # 
        # get text from field 
        # 
        def get_text(self):
            if (self.lines > 1):
                [start, end] = self.buffer.get_bounds()
                print(self.buffer.get_text(start, end, False))
                return self.buffer.get_text(start, end, False)
            else:
                return self.widget.get_text()
        # 
        # 
        # put text into a field 
        # 
        def set_text(self, text):
            if (self.lines > 1):
                self.buffer.set_text(text) 
            else: 
                self.widget.set_text(text) 


The single line Gtk.Entry widgets work fine, text gets loaded, I can
change it and save it.

The multi-line Gtk.TextBuffer ones refuse to work at all, no errors or
anything but text won't load into them or save out of them.  They used
to work fine in gtk+ 2.

Text loaded into the Gtk.TextBuffer using set_text() doesn't appear,
the text boxes are empty even though the 'text' parameter does have a
string in it (I've checked with a print()).  I can enter text using
the keyboard but that text isn't retrieved by the get_text() method.

What am I doing wrong?  Virtually nothing has changed in this part of
my code between gtk+ 2 and gtk+ 3, just the import and gtk to Gtk and
a couple of enum formats.

-- 
Chris Green
·


More information about the Python-list mailing list