Как сбросить маркированный список в обычный текст и обратно в QTextEdit

#python #qtextedit #pyqt6

Вопрос:

Я пытаюсь установить выбранные строки в маркированные точки и обратно, здесь я устанавливаю отступ в 0, он уничтожает маркированные точки, но свойство списка остается верным, поэтому этот код не будет снова возвращать ту же строку в маркированный список, как очистить базовый формат списка Или каков наилучший подход?

     def bullet_list(self):
    cursor = self.textEdit.textCursor()
    list = cursor.currentList()
    if list:
        listfmt = cursor.currentList().format()
        listfmt.setIndent(0)
        cursor.createList(listfmt)
        self.textEdit.setTextCursor(cursor)
        self.textEdit.setFocus()

    else:
        listFormat = QTextListFormat()
        style = QTextListFormat.Style.ListDisc
        listFormat.setStyle(style)
        cursor.createList(listFormat)
        self.textEdit.setTextCursor(cursor)
        self.textEdit.setFocus()
 

Ответ №1:

Элементы должны быть удалены из списка, и вы также не должны использовать createList их снова.

     def bullet_list(self):
        cursor = self.textEdit.textCursor()
        textList = cursor.currentList()
        if textList:
            start = cursor.selectionStart()
            end = cursor.selectionEnd()
            removed = 0
            for i in range(textList.count()):
                item = textList.item(i - removed)
                if (item.position() <= end and
                    item.position()   item.length() > start):
                        textList.remove(item)
                        blockCursor = QTextCursor(item)
                        blockFormat = blockCursor.blockFormat()
                        blockFormat.setIndent(0)
                        blockCursor.mergeBlockFormat(blockFormat)
                        removed  = 1
            self.textEdit.setTextCursor(cursor)
            self.textEdit.setFocus()
        else:
            listFormat = QTextListFormat()
            style = QTextListFormat.ListDisc
            listFormat.setStyle(style)
            cursor.createList(listFormat)
            self.textEdit.setTextCursor(cursor)
            self.textEdit.setFocus()
 

Примечание: list является ли Python встроенным, присвоение его чему-либо другому считается плохой практикой.

Комментарии:

1. @JackZero Обратите внимание, что я обновил ответ, так что удаляются только элементы списка, которые находятся в выборе.