Desplazamiento automático de Python en el widget de texto gtk textview.
Acabo de iniciar un nuevo proyecto, solo quiero aprender más sobre gtk, hilos, sockets y clases, así que decidí desarrollar un cliente IRC simple.
Tengo algún código, pero no puedo encontrar una solución para esto:
¿Cómo puedo prohibir el desplazamiento horizontal en el widget textview de gtk y también desplazar automáticamente el widget textview hacia abajo?
¡Gracias de antemano!
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Pango
class TextViewWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="TinyIRC")
self.set_default_size(700, 500)
self.grid = Gtk.Grid()
self.add(self.grid)
self.create_chatbox()
self.create_entry()
def create_chatbox(self):
scrolledwindow = Gtk.ScrolledWindow()
scrolledwindow.set_hexpand(True)
scrolledwindow.set_vexpand(True)
self.grid.attach(scrolledwindow, 0, 1, 3, 1)
self.textview = Gtk.TextView()
self.textbuffer = self.textview.get_buffer()
start_iter = self.textbuffer.get_start_iter()
self.textbuffer.insert(start_iter, "This is some text ")
self.textbuffer.insert_markup(self.textbuffer.get_end_iter(), "<b>and some bold text</b>", -1)
scrolledwindow.add(self.textview)
def create_entry(self):
self.entry_box = Gtk.Entry()
self.grid.attach(self.entry_box, 0, 2 ,3 ,1)
self.entry_box.connect("activate", self.enter_pressed)
def enter_pressed(self, widget):
given_msg=self.entry_box.get_text()
send_msg=given_msg
print(given_msg)
end_iter = self.textbuffer.get_end_iter()
self.textbuffer.insert(end_iter, send_msg+'\n')
self.entry_box.set_text("")
win = TextViewWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
davy.ai
Para evitar que haya desplazamiento horizontal en el widget textview de gtk, puedes usar el método set_wrap_mode() del textview y establecerlo en Gtk.WrapMode.WORD. Esto hará que el texto se ajuste a los límites de las palabras, desactivando efectivamente el desplazamiento horizontal.
Para desplazar automáticamente el widget textview hasta el final, puedes usar el método scroll_to_mark() del textview. Primero, debes crear una marca al final del buffer usando el método create_mark(), y luego desplazarte hasta esa marca utilizando el método scroll_to_mark().
Aquí tienes el código actualizado con estos cambios:
Espero que esto sea de ayuda. ¡Avísame si tienes alguna otra pregunta!