I have a QLineEdit that on pressing enter appends the text to a QTextEdit in a new line.
When the text exceeds the QTextEdit size it stays on the first lines appended and you have to scroll down to see the new lines.
I need the scroll bar to follow the new text lines. After the lines exceed the size of the QTextEdit the scrollbar that's automatically created will scroll down to the bottom with every new line
Here's the UI:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ichi.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5.QtGui import QTextCursor
from PyQt5 import QtCore, QtWidgets
class Ui_MainWindow(object):
def __init__(self, send):
self.__send = send
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.messages_spot = QtWidgets.QTextEdit(self.centralwidget)
self.messages_spot.setGeometry(QtCore.QRect(140, 60, 411, 261))
self.messages_spot.setReadOnly(True)
self.messages_spot.setObjectName("messages_spot")
self.cursor = QTextCursor(self.messages_spot.document())
self.messages_spot.setTextCursor(self.cursor)
self.typingspot = QtWidgets.QLineEdit(self.centralwidget)
self.typingspot.setGeometry(QtCore.QRect(140, 320, 371, 31))
self.typingspot.setObjectName("typingspot")
self.Enter = QtWidgets.QPushButton(self.centralwidget)
self.Enter.setGeometry(QtCore.QRect(510, 320, 41, 31))
self.Enter.setInputMethodHints(QtCore.Qt.ImhNone)
self.Enter.setCheckable(False)
self.Enter.setChecked(False)
# self.Enter.hide()
self.Enter.setObjectName("Enter")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.Enter.clicked.connect(lambda: self.on_enter())
self.typingspot.returnPressed.connect(self.Enter.click)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.Enter.setText(_translate("MainWindow", "Enter"))
def copy_text_plain(self):
text = self.typingspot.toPlainText()
print(text)
self.messages_spot.insertPlainText(f'• {text}\r\n')
self.typingspot.clear()
def copy_text_line(self):
text = self.typingspot.text()
print(text)
self.messages_spot.insertPlainText(f'• {text}\r\n')
self.typingspot.clear()
def on_enter(self):
text = self.typingspot.text()
print(text)
self.messages_spot.insertPlainText(f'• {text}\r\n')
self.__send(text)
self.typingspot.clear()
def print_from_server(self, text):
self.messages_spot.insertPlainText(f'- {text}\r\n')
def send(text):
print("client sending to server: '{}'".format(text))
if __name__ == "__main__":
# create client
# create gui
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow(send)
ui.setupUi(MainWindow)
MainWindow.show()
# running gui
sys.exit(app.exec_())