pyqt5 как оставить пробелы в строке

Виджет QTextEdit, добавляю текст и он съедает все пробелы. У меня строка типа таблицы и между словами нужно оставить все пробелы, а он оставляет только 1.


Ответы (1 шт):

Автор решения: S. Nick

Установите QFont("Consolas", ...)

import sys
from PyQt5 import QtGui, QtWidgets, QtCore
from PyQt5.Qt import *


class StackedExample(QWidget):                    # StackedExample
    def __init__(self):
        super().__init__()

        self.leftlist = QListWidget()
        self.do_leftbar()

        self.stack1 = QWidget()
        self.stack2 = QWidget()

        self.stack1UI()
        self.stack2UI()

        self.Stack = QStackedWidget(self)

        self.Stack.addWidget(self.stack1)    # возвращает индекс виджета addWidget
        self.Stack.addWidget(self.stack2)


        hbox = QHBoxLayout(self)             # расположение макета
        hbox.addWidget(self.leftlist)
        hbox.addWidget(self.Stack)

        self.setLayout(hbox)
        self.leftlist.currentRowChanged.connect(self.display)
        self.button.clicked.connect(self.gooo)
        self.setGeometry(100, 100, 500, 500)
        self.setWindowTitle('StackedWidget demo')


    def do_leftbar(self):
        # insertItem(позиция в списке, текст)
        self.leftlist.insertItem(0, 'Сравнение справочников')               
        self.leftlist.insertItem(1, 'Редактирование справочников')
        # self.leftlist.insertItem(2, 'Будущий функционал')

    def gooo(self):
        if(self.L1.isChecked()):
            text = "12  5   90"                      # <<<=======<
        elif (self.L2.isChecked()):
            text = "  3 5    0"                      # <<<=======<
        elif (self.L3.isChecked()):
            text = "1        0"                      # <<<=======<
        else:
            text = "1234567890"                      # <<<=======<

        self.textEdit.append(text)                                

    def stack1UI(self):

        label = QLabel("select")
        self.L1 = QRadioButton("L1")
        self.L2 = QRadioButton("L2")
        self.L3 = QRadioButton("L3")
        face = QHBoxLayout()
        face.addWidget(label)
        face.addWidget(self.L1)
        face.addWidget(self.L2)
        face.addWidget(self.L3)

        self.button = QPushButton("GO")
        self.textEdit = QTextEdit()                                
        self.textEdit.setReadOnly(True)                           # +
        font = QFont("Consolas", 14, QFont.Bold)                  # <<<=======<
        self.textEdit.setFont(font)                               # <<<=======<

        layout = QVBoxLayout()
        layout.addLayout(face)
        layout.addWidget(self.button)
        layout.addWidget(self.textEdit)

        self.stack1.setLayout(layout)

    def stack2UI(self):
        layout = QFormLayout()
        self.stack2.setLayout(layout)

    def display(self,i):
        print(i)
        self.textEdit.append(f'currentRowChanged -> {i}')
        self.Stack.setCurrentIndex(i)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setFont(QFont("Times", 12, QFont.Bold))
    demo = StackedExample()
    demo.resize(600, 400)
    demo.show()
    sys.exit(app.exec_())

введите сюда описание изображения


Update

Как вариант. Замените пробел на &nbsp;

import sys
from PyQt5 import QtGui, QtWidgets, QtCore
from PyQt5.Qt import *


class StackedExample(QWidget):                    # StackedExample
    def __init__(self):
        super().__init__()

        self.leftlist = QListWidget()
        self.do_leftbar()

        self.stack1 = QWidget()
        self.stack2 = QWidget()

        self.stack1UI()
        self.stack2UI()

        self.Stack = QStackedWidget(self)

        self.Stack.addWidget(self.stack1)    # возвращает индекс виджета addWidget
        self.Stack.addWidget(self.stack2)


        hbox = QHBoxLayout(self)             # расположение макета
        hbox.addWidget(self.leftlist)
        hbox.addWidget(self.Stack)

        self.setLayout(hbox)
        self.leftlist.currentRowChanged.connect(self.display)
        self.button.clicked.connect(self.gooo)
        self.setGeometry(100, 100, 500, 500)
        self.setWindowTitle('StackedWidget demo')


    def do_leftbar(self):
        # insertItem(позиция в списке, текст)
        self.leftlist.insertItem(0, 'Сравнение справочников')               
        self.leftlist.insertItem(1, 'Редактирование справочников')
        # self.leftlist.insertItem(2, 'Будущий функционал')

    def gooo(self):
        if(self.L1.isChecked()):
            text = "<span style='color:red;'>12&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;90</span>"           # <<<=======<
        elif (self.L2.isChecked()):
            text = "<font color='red'>&nbsp;&nbsp;3&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;0</font>"        # <<<=======<
        elif (self.L3.isChecked()):
            text = "<font color='blue'>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</font>"  # <<<=======<
        else:
            text = "1234567890"                      # <<<=======<

        self.textEdit.append(text)                                

    def stack1UI(self):

        label = QLabel("select")
        self.L1 = QRadioButton("L1")
        self.L2 = QRadioButton("L2")
        self.L3 = QRadioButton("L3")
        face = QHBoxLayout()
        face.addWidget(label)
        face.addWidget(self.L1)
        face.addWidget(self.L2)
        face.addWidget(self.L3)

        self.button = QPushButton("GO")
        self.textEdit = QTextEdit()                                
        self.textEdit.setReadOnly(True)                           # +
        font = QFont("Consolas", 14, QFont.Bold)                  # <<<=======<
        self.textEdit.setFont(font)                               # <<<=======<

        layout = QVBoxLayout()
        layout.addLayout(face)
        layout.addWidget(self.button)
        layout.addWidget(self.textEdit)

        self.stack1.setLayout(layout)

    def stack2UI(self):
        layout = QFormLayout()
        self.stack2.setLayout(layout)

    def display(self,i):
        print(i)
        self.textEdit.append(f'currentRowChanged -> {i}')
        self.Stack.setCurrentIndex(i)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setFont(QFont("Times", 12, QFont.Bold))
    demo = StackedExample()
    demo.resize(600, 400)
    demo.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка