PyQT5 как добавить возможность изменения размеров виджетов

Рейтинг: 0Ответов: 1Опубликовано: 16.05.2023

У меня есть простой интерфейс на PyQt5, который состоит из верхней и нижней зоны, разделенных горизонтальной чертой. Как я могу дать пользователю возможность перемещать эту разделительную полосу вверх и вниз, изменяя, соответственно, размеры верхней и нижней части?

import sys
from PyQt5.QtWidgets import *


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.central_widget = QWidget(self)
        self.setGeometry(50, 50, 1300, 700)
        self.setCentralWidget(self.central_widget)
        self.layout_main_window = QVBoxLayout()
        self.central_widget.setLayout(self.layout_main_window)
        #  верхняя часть
        self.layout_top = QHBoxLayout()
        self.list = QListView()
        self.top_table = QTableWidget()
        self.top_table.setRowCount(20)
        self.layout_top.addWidget(self.list)
        self.layout_top.addWidget(self.top_table)
        self.layout_main_window.addLayout(self.layout_top)
        #  нижняя часть
        self.layout_bottom = QVBoxLayout()
        self.bot_table = QTableWidget()
        self.bot_table.setRowCount(20)
        self.layout_bottom.addWidget(self.bot_table)
        self.layout_main_window.addLayout(self.layout_bottom)
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())

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

Ответы

▲ 2Принят

Используйте Splitter:

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import *


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.central_widget = QWidget(self)
        self.setGeometry(50, 50, 1300, 700)
        self.setCentralWidget(self.central_widget)
        self.layout_main_window = QVBoxLayout()
        self.central_widget.setLayout(self.layout_main_window)
        #  верхняя часть
        self.frame_top = QFrame()
        self.layout_top = QHBoxLayout()
        self.list = QListView()
        self.top_table = QTableWidget()
        self.top_table.setRowCount(20)
        self.layout_top.addWidget(self.list)
        self.layout_top.addWidget(self.top_table)
        self.frame_top.setLayout(self.layout_top)
        #  нижняя часть
        self.frame_bottom = QFrame()
        self.layout_bottom = QVBoxLayout()
        self.bot_table = QTableWidget()
        self.bot_table.setRowCount(20)
        self.layout_bottom.addWidget(self.bot_table)
        self.frame_bottom.setLayout(self.layout_bottom)
        # Splitter
        self.splitter2 = QSplitter(Qt.Vertical)
        self.splitter2.addWidget(self.frame_top)
        self.splitter2.addWidget(self.frame_bottom)
        self.layout_main_window.addWidget(self.splitter2)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())