Объединить несколько QSplitter в PyQt5 - PullRequest
0 голосов
/ 05 марта 2020

У меня есть 3 QWidgets, которые я хочу объединить. В основном это должно выглядеть так:

           |           |
           |           |
QWidget 1  | QWidget 2 | QWidget 3
           |           |
           |           |
       QSplitter1  QSplitter2

То, что я до сих пор пробовал:

1) Добавление каждого виджета в соответствующий QSplitter

widget1 = QWidget()
widget2 = QWidget()
widget3 = QWidget()

splitter1 = QSplitter(self)
splitter2 = QSplitter(self)

splitter1.addWidget(widget1)
splitter1.addWidget(widget2)

splitter2.addWidget(widget2)
splitter2.addWidget(widget3)

Здесь я получаю один подвижный разделитель, который должен быть splitter2

2) Добавление полного виджета splitter1 к splitter2 в качестве первого аргумента

widget1 = QWidget()
widget2 = QWidget()
widget3 = QWidget()

splitter1 = QSplitter(self)
splitter2 = QSplitter(self)

splitter1.addWidget(widget1)
splitter1.addWidget(widget2)

splitter2.addWidget(splitter1)
splitter2.addWidget(widget3)

Здесь активен только первый разделитель.

Что правильный подход делает это?

1 Ответ

1 голос
/ 05 марта 2020

QSplitter - это контейнер виджет, который ведет себя аналогично QBoxLayout, добавляя возможность изменения размеров элементов. Это означает, что вам (обычно) нужен только один сплиттер, независимо от того, сколько виджетов вы добавляете в одной и той же ориентации.

То, что вы называете «сплиттерами», фактически является сплиттером ручками ( QSplitterHandle классы), поэтому структура на самом деле такая:

QSplitter -------------------------------------+
|               |               |              |
h               H               H              |
a               A               A              |
n               N               N              |
d   QWidget 1   D   QWidget 2   D  QWidget 3   |
l               L               L              |
e               E               E              |
|               |               |              |
+---------------+---------------+--------------+

Итак, это так же просто, как это:

widget1 = QWidget()
widget2 = QWidget()
widget3 = QWidget()

splitter = QSplitter(self)
splitter.addWidget(widget1)
splitter.addWidget(widget2)
splitter.addWidget(widget3)
...