Как обновить содержимое QScrollArea?
Есть QScrollArea, содержащий какой-то QWidget с содержимым:
def initUI(self):
w = QWidget()
self.scroll = QScrollArea()
self.scroll.setWidget(w)
Как можно, например, по нажатию на кнопку обновить содержимое self.scroll?
import sys
from PyQt5.Qt import *
class Demo(QWidget):
def __init__(self):
super().__init__()
self.vbox = QVBoxLayout(self)
self.button = QPushButton(f'Обновить')
self.button.clicked.connect(self.updateScroll)
self.vbox.addWidget(self.button)
self.w = QWidget()
self.scroll = QScrollArea()
self.scroll.setObjectName("ScrolledArea")
self.scroll.setStyleSheet("#ScrolledArea {\n"
" border: none;\n"
"}\n")
self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self.scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.scroll.setWidgetResizable(True)
self.scroll.setWidget(self.w)
self.vbox.addWidget(self.scroll)
def updateScroll(self):
self.w2 = QWidget()
print("Обновить содержимое self.scroll на self.w2")
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Demo()
w.show()
app.exec_()
Чтобы очистить содержимое Layout перед добавлением можно применить:
Demo.clearLayout(self.vbox2)
def clearLayout(layout):
while layout.count():
child = layout.takeAt(0)
if child.widget():
child.widget().deleteLater()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
from PyQt5.Qt import *
class Demo(QWidget):
def __init__(self):
super().__init__()
self.vbox = QVBoxLayout(self)
self.button = QPushButton(f'Обновить')
self.button.clicked.connect(self.updateScroll)
self.vbox.addWidget(self.button)
self.w = QWidget()
self.vbox2 = QVBoxLayout(self.w)
self.label = QLabel('Hello World')
self.vbox2.addWidget(self.label)
self.scroll = QScrollArea()
self.scroll.setObjectName("ScrolledArea")
self.scroll.setStyleSheet("#ScrolledArea {\n"
" border: none;\n"
"}\n")
self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self.scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.scroll.setWidgetResizable(True)
self.scroll.setWidget(self.w)
self.vbox.addWidget(self.scroll)
def updateScroll(self):
self.label.hide()
self.w2 = QWidget()
label = QLabel('Hello PyQt5')
vbox = QVBoxLayout(self.w2)
vbox.addWidget(label)
label2 = QLabel()
label2.setPixmap(QPixmap('Ok.png'))
vbox.addWidget(label2)
print("Обновить содержимое self.scroll на self.w2")
self.vbox2.addWidget(self.w2)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Demo()
w.show()
sys.exit(app.exec_())
