pyQt: прокрутка QScrollArea, а не каждый QTextEdit по отдельности

имея много QTextEdit рядом друг с другом (у меня есть подмножество таблицы HTML в них), я не хочу, чтобы они получали полосу прокрутки каждый, когда они переполняют пространство окна.

Я хочу, чтобы в окне была глобальная полоса прокрутки. Какова лучшая практика?

вот код как пример:

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

class MainWindow(QScrollArea):
    def __init__(self):
        super().__init__()

        layout = QHBoxLayout(self)

        text = ''
        for i in range(0,1000):
            text = '{0} {1}\n'.format(text, i)

        for i in range(0,10):
            textEdit = QTextEdit()
            layout.addWidget(textEdit)
            textEdit.setText(text)

        self.resize(600,400)

        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())

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

Я могу добавить контейнер к вышеперечисленному, и он избавится от полос прокрутки, но тогда я вообще ничего не могу прокрутить

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

class MainWindow(QScrollArea):
    def __init__(self):
        super().__init__()

        container = QFrame(self)
        container.resize(600,15000)

        layout = QHBoxLayout(container)

        text = ''
        for i in range(0,1000):
            text = '{0} {1}\n'.format(text, i)

        for i in range(0,10):
            textEdit = QTextEdit()
            layout.addWidget(textEdit)
            textEdit.setText(text)

        self.resize(600,400)

        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())

person user3755529    schedule 14.10.2017    source источник
comment
Если текстовые правки имеют разное содержимое, они не будут прокручиваться на одинаковое расстояние. Так как же может работать глобальная полоса прокрутки? Предполагается ли прокручивать только текстовое редактирование, имеющее фокус клавиатуры? Может быть, было бы лучше, если бы каждое редактирование текста показывало свою полосу прокрутки только при наведении на нее курсора мыши.   -  person ekhumoro    schedule 15.10.2017
comment
Я использую QtextEdit не как TextEdit, а как хороший инструмент для создания пользовательских меток через подмножество HTML. Итак, эти QTextEdit похожи на изображения, мне не нужно их прокручивать, я хочу прокручивать группу меток/QTextEdit   -  person user3755529    schedule 15.10.2017


Ответы (1)


Похоже, все, что вам нужно сделать, это установить политику вертикальной полосы прокрутки. в текстовом редакторе, а затем добавить виджет-контейнер в прокрутку -площадь:

class MainWindow(QScrollArea):
    def __init__(self):
        super().__init__()

        container = QFrame(self)
        container.resize(600,15000)

        layout = QHBoxLayout(container)

        text = ''
        for i in range(0,1000):
            text = '{0} {1}\n'.format(text, i)

        for i in range(0,10):
            textEdit = QTextEdit()
            layout.addWidget(textEdit)
            textEdit.setText(text)
            textEdit.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

        self.setWidget(container)

        self.resize(625,400)

        self.show()
person ekhumoro    schedule 15.10.2017
comment
в яблочко! спасибо... как мне сделать так, чтобы размер контейнера адаптировался к содержимому? - person user3755529; 15.10.2017