Нашел решение
def добавитьСообщениеВЧатПользователя(self, id : str, сообщение : str, alignment):
контент = self.пользователиМеню.получитьКонтентПанель(id)
if not hasattr(контент, "прокручиваемыйКонтент"):
горизонталь = QVBoxLayout()
контент.прокручиваемыйКонтент = ПрокручиваемыйВертикальноКонтент(контент)
горизонталь.addWidget(контент.прокручиваемыйКонтент)
контент.прокручиваемыйКонтент.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
контент.setLayout(горизонталь)
w, horizontal = QWidget(), QHBoxLayout()
w.setLayout(horizontal)
textInput = QPlainTextEdit()
textInput.setFixedHeight(80)
horizontal.addWidget(textInput)
btnSend = QPushButton("Отправить")
horizontal.addWidget(btnSend)
горизонталь.addWidget(w, alignment=Qt.AlignBottom)
def btnClick(_):
self.добавитьСообщениеВЧатПользователя(id, textInput.toPlainText(), Qt.AlignRight)
btnSend.clicked.connect(btnClick)
def keyPressEvent(event):
print(event, event.nativeModifiers(), Qt.KeyboardModifier.ShiftModifier)
if event.key() == Qt.Key_Return:
if event.nativeModifiers() == 528:
QPlainTextEdit.keyPressEvent(textInput, event)
else:
return btnClick(None)
else:
QPlainTextEdit.keyPressEvent(textInput, event)
textInput.keyPressEvent = keyPressEvent
if сообщение is not None and len(сообщение) > 0:
виджет = QWidget()
виджет.setGeometry(100,0,200, 50)
виджет.move(контент.width() - 200, 0)
виджет.setFixedHeight(50)
виджет.setFixedWidth(300)
виджет.setStyleSheet("""background-color: rgba(0,0,0,155)""")
текст = QTextEdit(виджет)
текст.setText(сообщение)
текст.setGeometry(0,0,300,50)
текст.setReadOnly(True)
def timeout(*args, **kwargs):
скроллер = текст.verticalScrollBar()
текст.setFixedHeight(текст.height() + (скроллер.maximum() - скроллер.value()))
виджет.setFixedHeight(текст.height())
таймер = QTimer(виджет)
def update(*args, **kwargs):
контент.прокручиваемыйКонтент.scrollToTheEnd()
таймер.stop()
таймер.timeout.connect(update)
таймер.start(100)
текст.verticalScrollBar().rangeChanged.connect(timeout)
контент.прокручиваемыйКонтент.addWidget(виджет, alignment=alignment )
контент.прокручиваемыйКонтент.scrollToTheEnd()