使用QScrollArea为窗口添加滚动条

QScrollArea是一个容器控件,当一个窗口很大时,在显示器上无法显示整个窗口,Qt提供了一个叫作滚动窗口类QScrollArea,它提供了一个垂直和水平的滚动条,用以浏览整个窗口。

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) #设置滚动区域内子控件大小是否可变

使用

  1. 创建最底层容器控件,用来放置ScrollArea滚动区域。为了使ScrollArea能够随时占满这个窗口,为控件设置一个布局
  2. 创建ScrollArea滚动区域设置setWidgetResizable(True),再将创建的ScrollArea加入到最底层控件的布局中
  3. 创建一个用于展示的容器控件,设置为滚动区域控件,并为其设置一个布局。
  4. 往展示容器控件布局中添加展示内容

整个的滑动窗口的结构为:

实例代码

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_())
文章作者: Dar1in9
文章链接: http://dar1in9s.github.io/2020/02/15/PyQt5/使用QScrollArea为窗口添加滚动条/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Dar1in9's Blog