0

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_())
Erez Avior
  • 15
  • 4

0 Answers0