Задать вопрос
@aselockd

Как установить размер текстового поля по его содержимому?

Как установить размер текстового элемента по его содержимому? 67c41bc0e098d216491686.png

вот код
def добавитьСообщениеВЧатПользователя(self, id : str, сообщение : str, alignment):
        контент = self.пользователиМеню.получитьКонтентПанель(id)

        if not hasattr(контент, "прокручиваемыйКонтент"):
            горизонталь = QVBoxLayout()
            контент.прокручиваемыйКонтент = ПрокручиваемыйВертикальноКонтент(контент)
            горизонталь.addWidget(контент.прокручиваемыйКонтент)
            контент.прокручиваемыйКонтент.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
            контент.setLayout(горизонталь)
        
        виджет = QWidget()
        виджет.setGeometry(100,0,200, 50)
        виджет.move(контент.width() - 200, 0)
        виджет.setFixedHeight(50)
        виджет.setFixedWidth(300)
        виджет.setStyleSheet("""background-color: rgba(0,0,0,155)""")

        текст = QPlainTextEdit(виджет)
        текст.setPlainText(сообщение)
        текст.setGeometry(0,0,300,50)


        контент.прокручиваемыйКонтент.addWidget(виджет, alignment=alignment )
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@aselockd Автор вопроса
Нашел решение

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()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
xottsy
@xottsy
текст.document().size().height() = высота
текст.document().size().height() = ширина

вернет размеры текста, дальше под свою систему делай
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы