#python #python_3x #pyqt5
Есть окно с табличным размещением компонентов.
В качестве компонентов используются QLabel, их может быть размещено как по горизонтали,
так и по вертикали в любом количестве, например, 20x20, в итоге 400, вообщем заранее
сколько будет компонентов не известно, поэтому и нужна прокрутка в окне по двум осям.
Как добавить прокрутку окна по горизонтали и по вертикали?
Вот для примера код:
import sys
from PyQt5.QtWidgets import QWidget, QApplication,
QGridLayout, QLabel
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.grid = QGridLayout()
self.setLayout(self.grid)
self.addComponents()
self.show()
def addComponents(self):
i = 0
j = 0
countLab = 0
while i < 25:
while j < 25:
lab = QLabel('lab_'+ str(countLab))
self.layout().addWidget(lab, i, j)
countLab += 1
j += 1
j = 0
i += 1
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.setWindowTitle('Example')
sys.exit(app.exec_())
Ответы
Ответ 1
Как вариант: import sys from PyQt5.QtWidgets import (QWidget, QApplication, QGridLayout, QLabel, QScrollArea) class MainWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.grid = QGridLayout() self.addComponents() scroll = QScrollArea(self) self.widget = QWidget() self.widget.setLayout(self.grid) scroll.setWidget(self.widget) scroll.setWidgetResizable(True) def addComponents(self): i = 0 j = 0 countLab = 0 while i < 25: while j < 25: lab = QLabel('lab_'+str(countLab)) self.grid.addWidget(lab, i, j) #self.layout().addWidget(lab, i, j) countLab += 1 j += 1 j = 0 i += 1 if __name__ == '__main__': app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.setWindowTitle('Example') mainWindow.setGeometry(300, 100, 480, 320) mainWindow.show() sys.exit(app.exec_()) Вариант 2 сделать интерфейс растягиваемым: import sys from PyQt5.QtWidgets import (QWidget, QApplication, QGridLayout, QLabel, QScrollArea, QHBoxLayout, QVBoxLayout) class MainWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.grid = QGridLayout() self.addComponents() layoutH = QHBoxLayout() layoutV = QVBoxLayout() scroll = QScrollArea() self.widget = QWidget() layoutH.addWidget(scroll) self.widget.setLayout(self.grid) scroll.setWidget(self.widget) scroll.setWidgetResizable(True) layoutV.addLayout(layoutH) self.setLayout(layoutV) def addComponents(self): i = 0 j = 0 countLab = 0 while i < 25: while j < 25: lab = QLabel('lab_'+str(countLab)) self.grid.addWidget(lab, i, j) #self.layout().addWidget(lab, i, j) countLab += 1 j += 1 j = 0 i += 1 if __name__ == '__main__': app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.setWindowTitle('Example') mainWindow.setGeometry(300, 100, 480, 320) mainWindow.show() sys.exit(app.exec_())
Комментариев нет:
Отправить комментарий