QScrollArea是一个容器控件,当一个窗口很大时,在显示器上无法显示整个窗口,Qt提供了一个叫作滚动窗口类QScrollArea,它提供了一个垂直和水平的滚动条,用以浏览整个窗口。
QScrollArea继承自QAbstractScrollArea
滚动区域在它的中心提供了一个视口,而窗口就通过该视口显示,可以通过设置滚动条的显隐策略来控制其显隐。
常用的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13
| QScrollArea(parent: QWidget = None)
setWidget(self, QWidget)
takeWidget(self) -> QWidget
setAlignment(self, Qt.AlignmentFlag)
setWidgetResizable(self, bool)
|
使用
- 创建最底层容器控件,用来放置ScrollArea滚动区域。为了使ScrollArea能够随时占满这个窗口,为控件设置一个布局
- 创建ScrollArea滚动区域设置
setWidgetResizable(True)
,再将创建的ScrollArea加入到最底层控件的布局中
- 创建一个用于展示的容器控件,设置为滚动区域控件,并为其设置一个布局。
- 往展示容器控件布局中添加展示内容
整个的滑动窗口的结构为:
实例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| import sys from PyQt5.Qt import *
class Window(QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.center_window()
def center_window(self): self.widget_bottom = QWidget(self) self.setCentralWidget(self.widget_bottom) self.layout_bottom = QVBoxLayout(self.widget_bottom)
self.scroll_area = QScrollArea(self.widget_bottom) self.scroll_area.setWidgetResizable(True) self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.layout_bottom.addWidget(self.scroll_area)
self.widget_show = QWidget() self.layout_show = QVBoxLayout(self.widget_show)
self.scroll_area.setWidget(self.widget_show)
btn = QPushButton() btn.setText("123") btn.clicked.connect(self.add_btn) self.layout_show.addWidget(btn)
def add_btn(self): btn = QPushButton() btn.setText("123") btn.clicked.connect(self.add_btn) self.layout_show.addWidget(btn)
app = QApplication(sys.argv) window=Window() window.show() sys.exit(app.exec_())
|