Gtk.TextBuffer problem on converting from GTK+ 2 to GTK+ 3
MRAB
python at mrabarnett.plus.com
Thu Jul 30 12:58:40 EDT 2020
On 2020-07-30 17:23, Chris Green wrote:
> 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.
>
You're creating a TextBuffer and a TextView, but I don't see any code
that ties them together. How would the view know to display the contents
of the buffer?
More information about the Python-list
mailing list